4

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

我想 wait() 直到它们中的任何一个完成。

我目前正在一个while循环中进行轮询,这可能效率很低

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

我想知道,有没有办法等待最快完成的子进程,而不是忙于等待轮询所有子进程?

4

1 回答 1

1

只要您不在 Windows 上,您就可以使用os.wait()它。它完全设计为等到第一个子进程退出。

但是,隐藏的副作用是您丢失了进程的退出代码(现在假定为 0)。可以自己设置,但这有点hacky。

proc = [p1, p2, p3, p4]
pid, status = os.wait()
for p in proc:
    if p.pid == pid:
        # We need to set the process's exit status now, or we
        # won't be able to retrieve it later and it will be
        # assumed to be 0.
        # This is a kind of hacky solution, but this function has existed
        # ever since subprocess was first included in the stdlib and is
        # still there in 3.10+, so it *should* be pretty stable.
        p._handle_exitstatus(status)

        #Do whatever

注意:这在 python 3 上同样适用

于 2021-03-31T08:16:01.187 回答