如何延迟执行直到所有并发进程完成?
我正在使用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))
这样也能正常工作;每个程序都会把输出写到一个文本文件里,并且它们会同时运行,这正是我想要的。可我就是搞不清楚怎么让程序等所有的程序都写完文件后再继续。
我一直在想,可能只需要把os.system()换成pOpen(),然后像上面那样用wait()来等待单个程序完成,但这样会导致程序一个接一个地运行。
再重申一下我的问题:我怎么才能同时运行多个程序,并且等所有程序都完成(写入各自的输出文件)后再继续执行?
2 个回答
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()
0
通过使用 subprocess.Popen.returncode,你可以检查一个子进程是否已经结束。