并行处理python脚本

问题描述 投票:0回答:2

我有一个python脚本,一次接受一个输入并处理它。我想同时运行与不同输入并行的脚本。像50或100次,但有来自txt文件的不同输入。

我执行脚本如:

python script.py -d url1 

然后

python script.py -d url2

然后

python script.py -d url3

而不是一次输入一个参数,我想从文本文件中提取这些URL并并行处理它们。

我尝试使用gnu-parallel在bash shell中运行此脚本,但bash脚本不运行python shell,因此出错。

代码如下---

#!/usr/bin/env bash
doit() {
    host="$1"
    ~/script/python script1.py -d $host
      }
   export -f doit

   cat "$1" | parallel -j50 -k doit 

txt文件的内容---

url1.com
url2.com
url3.com
--------
url1000.com
url_any.com
python parallel-processing multiprocessing gnu-parallel
2个回答
1
投票

使用GNU Parallel,像这样:

parallel --dry-run -a arguments.txt python script.py

假设您的参数在"arguments.txt"中每行一个。

如果需要,使用parallel -k ...按顺序保持输出。

使用parallel --bar ...获取进度条。


0
投票

GNU Parallel的替代方法是使用Python子进程重复执行命令。

这是使用Python 2.7的一个例子。

首先,您的代码需要读取文本文件以将所有参数分配给列表。

with open('<Arguments text file location>') as f:
    arguments = f.read().splitlines()

然后使用循环使用子进程为每个参数运行一次命令。

import subprocess
procs = []
for argument in arguments:
    cmd = 'python script.py %(argument)' % {'argument': argument}
    procs.append(
        subprocess.Popen(cmd, shell=True)
    )
exit_codes = [p.wait() for p in procs]
© www.soinside.com 2019 - 2024. All rights reserved.