假设我有 4 个资源要使用。 我创建了 4 个子进程,然后等待其中 1 个空闲,一旦其中一个空闲,我就会再次使用已释放的资源。
我想知道是否有任何方法可以找出哪个子进程已完成工作。截至目前,我将所有 child 的 pid 存储在一个列表中,并使用 for 循环进行迭代。
for p in ps:
p.wait()
但这会阻塞应用程序,直到第一个进程完成。我的目标是等到任何子流程完成。 请让我知道任何想法。
最佳答案
从列表中每个子进程对象的 pid
字段中检索进程 ID,并创建一个将这些进程 ID 映射回子进程对象的字典。然后调用 os.wait
,它将等待 任何 子进程退出,并使用您的字典将返回的 PID 映射回适当的子进程。为了更好地控制,请使用 os.waitpid
或 os.wait3
或 os.wait4
(Python 文档并没有真正解释它们是如何工作的,但是据我所知,它们直接映射到 waitpid 和 wait4 系统调用,因此您可以使用这些文档作为指南)。
关于 python 子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4974209/