我目前正在并行运行一些子进程(多个子进程),{p1,p2,p3,p4}。
我想 wait() 直到它们中的任何一个完成。
我目前正在一个while循环中进行轮询,这可能效率很低
proc = [p1, p2, p3, p4]
while True:
for p in proc:
if p.poll() != None:
#Do whatever
我想知道,有没有办法等待最快完成的子进程,而不是忙于等待轮询所有子进程?
我目前正在并行运行一些子进程(多个子进程),{p1,p2,p3,p4}。
我想 wait() 直到它们中的任何一个完成。
我目前正在一个while循环中进行轮询,这可能效率很低
proc = [p1, p2, p3, p4]
while True:
for p in proc:
if p.poll() != None:
#Do whatever
我想知道,有没有办法等待最快完成的子进程,而不是忙于等待轮询所有子进程?
只要您不在 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 上同样适用