103

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

 # main_script.py

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

2 回答 2

140

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

如果你使用这种方法,你可以防止进程僵尸停留太久。

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

如果您有几个子流程要等待,您可以这样做

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

它会在所有子流程完成后立即返回。然后,您有一个返回代码列表,您可能可以对其进行评估。

于 2013-02-27T09:10:44.647 回答
35
subprocess.call

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

p1.wait()
于 2013-02-27T08:54:34.343 回答