我有一个主进程,它创建了两个或更多的子进程,我希望主进程等待所有子进程完成它们的操作并退出。
# main_script.py
p1 = subprocess.Popen(['python script1.py'])
p2 = subprocess.Popen(['python script2.py'])
...
#wait main process until both p1, p2 finish
...
我有一个主进程,它创建了两个或更多的子进程,我希望主进程等待所有子进程完成它们的操作并退出。
# main_script.py
p1 = subprocess.Popen(['python script1.py'])
p2 = subprocess.Popen(['python script2.py'])
...
#wait main process until both p1, p2 finish
...
一个Popen
对象有一个.wait()
方法,专门用于等待给定子进程的完成(并且返回其退出状态)。
如果使用此方法,您将防止进程僵尸在系统中挂起太久。
(或者,您可以使用subprocess.call()
或subprocess.check_call()
进行调用和等待。如果不需要与进程进行IO交互,那可能就足够了。但是,这可能不是一个选项,因为您的两个子进程似乎应该并行运行,而这不会发生在(call()
/check_call()
)中。
如果您有多个子进程要等待,请执行以下操作:
exit_codes = [p.wait() for p in p1, p2]
如果出于语法原因,您可以使用exit_codes = [p.wait() for p in (p1, p2)]
,该命令会在所有子进程完成后立即返回。然后,您将获得一个返回代码列表,您可以对其进行评估。
.wait()
并处理结果。据我所知,如果该进程尚未终止,则返回None
,如果已经终止,则返回一个数字。 - glglglsubprocess.call
自动等待,你也可以使用:
p1.wait()
p1.wait(); p2.wait()
- catalin.costachePopen(['python script1.py'])
是不起作用的。要么使用Popen(['python', 'script1.py'])
(更好的选择),要么使用Popen('python script1.py', shell=True)
。 - glglgl