如何在几个并发进程完成之后才能延迟执行?

时间:2013-03-25 19:13:43

标签: python file subprocess wait popen

我正在使用subprocess.Popen()来运行进程并在执行其他操作之前等待它们完成。对于单个进程,我以这种通用形式编写了我的代码:

process = subprocess.pOpen(['command', 'options...', '1> output.txt'])
process.wait()

more code...

它运作得很好。脚本等待进程将结果输出到output.txt,然后再转到“更多代码...”

但是,我不知道该怎么做才能运行多个并发进程,并等待所有这些进程完成,以便继续执行其余的代码。没有等待的逻辑,我的代码通常看起来像这样:

for i in range(0, n_streams):
    os.system("start /b command [options] 1> output{0}.txt".format(i))

它工作正常;每个进程将输出写入文本文件,它们在我想要的同时运行。我无法弄清楚如何让程序在继续之前等待所有程序写入文本文件。

我一直认为我需要做的就是用pOpen()替换os.system()并使用wait(),就像我在上面为单个进程所做的那样,但这只会导致进程的实例按顺序运行。

重申我的问题:如何在同一时间运行多个进程实例,并等待所有实例完成(写入各自的输出文件),然后再继续?

2 个答案:

答案 0 :(得分:0)

使用subprocess.Popen.returncode可以检查子流程是否结束。

答案 1 :(得分:0)

只需存储所有已启动的进程,然后等待每个进程:

# Start and store all of your processes
processes = []
for i in range(0, n_streams):
    processes.append(subprocess.Popen(['command', 'options...', '1> output.txt']))

# Wait for all of them to complete
for proc in processes:
    proc.wait()