我有一个创建两个或更多子流程的主流程,我希望主流程等到所有子流程完成其操作并退出?
# main_script.py
p1 = subprocess.Popen(['python script1.py'])
p2 = subprocess.Popen(['python script2.py'])
...
#wait main process until both p1, p2 finish
...
答案 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()