等待过程,直到所有子进程结束? [重复](wait process until all subp

2019-07-20 15:18发布

这个问题已经在这里有一个答案:

  • Windows上的Python -如何等待多个子进程? 5个回答
  • subprocess.wait()不等待POPEN过程完成(使用线程时)? 4个回答

我有一个创建了两个以上的子进程的主处理,我想主要工艺等到所有子流程完成他们的运营和退出?

 # main_script.py

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

Answer 1:

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

如果你使用这种方法,你会阻止该进程僵尸躺在身边太久。

(或者,您也可以使用subprocess.call()subprocess.check_call()调用和等待。如果你不需要IO与过程,这可能是不够的。但可能这是不是一种选择,因为你如果2子过程似乎应该并行运行,他们将不会与( check_call() 。)

如果你有几个子过程等待,你可以做

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

其中当所有的子进程已经完成返回。 那么你有,你也许可以评估返回代码的列表。



Answer 2:

subprocess.call

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

p1.wait()


文章来源: wait process until all subprocess finish? [duplicate]