Python子进程等待任何先完成的子进程

Python子进程等待任何先完成的子进程,python,python-2.7,subprocess,wait,polling,Python,Python 2.7,Subprocess,Wait,Polling,我目前正在并行运行一些子进程(多个子进程),{p1,p2,p3,p4} 我想等到他们中的任何一个结束 我目前在while循环中进行轮询,这可能非常低效 proc = [p1, p2, p3, p4] while True: for p in proc: if p.poll() != None: #Do whatever 我想知道,有没有一种方法可以等待最快的完成子进程,而不是在所有子进程中忙着等待轮询?只要您不在Windows上,就可以使用它。它的设计正好是等待第一个子

我目前正在并行运行一些子进程(多个子进程),{p1,p2,p3,p4}

我想等到他们中的任何一个结束

我目前在while循环中进行轮询,这可能非常低效

proc = [p1, p2, p3, p4]
while True:
  for p in proc:
    if p.poll() != None:
      #Do whatever

我想知道,有没有一种方法可以等待最快的完成子进程,而不是在所有子进程中忙着等待轮询?

只要您不在Windows上,就可以使用它。它的设计正好是等待第一个子进程退出

但是,一个隐藏的副作用是丢失进程的退出代码(现在假定为0)。你可以自己设置,但有点粗糙

proc=[p1、p2、p3、p4]
pid,status=os.wait()
对于进程中的p:
如果p.pid==pid:
#我们现在需要设置进程的退出状态,否则
#以后将无法检索它,它将
#假设为0。
#这是一种黑客解决方案,但该功能已经存在
#自从子流程第一次包含在stdlib中并且
#在3.10+版本中仍然存在,所以它*应该*相当稳定。
p、 _handle_exitstatus(状态)
#做任何事
注意:这在Python3上同样有效