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

Nik*_*war 69 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
 ...
Run Code Online (Sandbox Code Playgroud)

glg*_*lgl 96

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

如果你使用这种方法,你将防止进程僵尸躺在那里太久.

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

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

exit_codes = [p.wait() for p in p1, p2]
Run Code Online (Sandbox Code Playgroud)

一旦所有子进程完成,它就会返回.然后,您可以获得一个可以评估的返回代码列表.

  • 问题是如何等待*all*子进程,而不仅仅是一个. (9认同)
  • @GregWard如果我等待几件事,我可以先后等待.特别是在这种情况下. (3认同)
  • 而且我认为仅仅遗漏这些细节并不会使答案变得无用. (3认同)

Gjo*_*dis 20

subprocess.call
Run Code Online (Sandbox Code Playgroud)

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

p1.wait()
Run Code Online (Sandbox Code Playgroud)