等待进程直到所有子进程完成?

时间:2013-02-27 08:50:08

标签: python subprocess ipc

我有一个创建两个或更多子流程的主流程,我希望主流程等到所有子流程完成其操作并退出?

 # main_script.py

 p1 = subprocess.Popen(['python script1.py']) 
 p2 = subprocess.Popen(['python script2.py'])
 ... 
 #wait main process until both p1, p2 finish
 ...

2 个答案:

答案 0 :(得分:86)

Popen对象具有为此精确定义的.wait()方法:等待给定子进程的完成(此外,还用于重新调整其退出状态)。

如果您使用此方法,则可以防止进程僵尸长时间躺着。

(或者,您可以使用subprocess.call()subprocess.check_call()进行呼叫和等待。如果您不需要IO进程,那可能就足够了。但可能这不是一个选项,因为如果这两个子进程似乎应该并行运行,那么它们不会与(check_call()一起运行。)

如果你有几个子进程需要等待,你可以

exit_codes = [p.wait() for p in p1, p2]

在所有子进程完成后立即返回。然后,您可以获得一个可以评估的返回代码列表。

答案 1 :(得分:16)

subprocess.call

自动等待,您也可以使用:

p1.wait()