如何延迟执行直到所有并发进程完成?

1 投票
2 回答
541 浏览
提问于 2025-04-17 20:15

我正在使用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,你可以检查一个子进程是否已经结束。

撰写回答