Python:并行运行子进程

参见英文答案 > Python subprocess in parallel                                    3个
我有以下代码将md5sums写入日志文件

for file in files_output:
    p=subprocess.Popen(['md5sum',file],stdout=logfile)
p.wait()

>这些是并行写的吗?即如果md5sum对其中一个文件花费很长时间,那么在等待前一个文件完成之前是否会启动另一个文件?
>如果上面的答案是肯定的,我可以假设写入日志文件的md5sums的顺序可能因md5sum对每个文件的持续时间而有所不同吗? (有些文件可能很大,有些文件很小)

解决方法:

所有子流程并行运行. (为了避免这一点,必须明确等待它们的完成.)它们甚至可以同时写入日志文件,从而使输出变得混乱.为避免这种情况,您应该让每个进程写入不同的日志文件,并在所有进程完成后收集所有输出.

q = Queue.Queue()
result = {}  # used to store the results
for fileName in fileNames:
  q.put(fileName)

def worker():
  while True:
    fileName = q.get()
    if fileName is None:  # EOF?
      return
    subprocess_stuff_using(fileName)
    wait_for_finishing_subprocess()
    checksum = collect_md5_result_for(fileName)
    result[fileName] = checksum  # store it

threads = [ threading.Thread(target=worker) for _i in range(20) ]
for thread in threads:
  thread.start()
  q.put(None)  # one EOF marker for each thread

在此之后,结果应存储在结果中.

上一篇:Python子进程模块比命令慢得多(不建议使用)


下一篇:python子进程和mysqldump