Python 子进程

1 投票
3 回答
1171 浏览
提问于 2025-04-16 11:40

假设我有4个资源想要使用。 我创建了4个子进程,然后等待其中一个空闲,一旦有一个空闲了,我就会再次利用这个空闲的资源。

我想知道有没有办法可以找出哪个子进程已经完成工作。目前,我把所有子进程的进程ID存储在一个列表里,然后用循环来遍历。

for p in ps:
   p.wait()

但是这样会导致应用程序在第一个进程完成之前一直被阻塞。我的目标是等到任意一个子进程完成。 请告诉我有什么想法。

3 个回答

1

在Python 3.2.x版本中,你可以使用“并发未来”(concurrent futures)。这是一个非常简单的接口,可以用来实现你所说的处理引擎,可以选择使用进程或线程。(当然,线程会受到全局解释器锁(GIL)的问题影响,但在3.2.x版本中,这个影响似乎小得多。)你只需要提供一个函数,这个函数会去访问你感兴趣的资源。

2

使用 p.poll()。这个方法可以告诉你这个进程是否已经结束。

3

从你列表中的每个子进程对象的 pid 字段获取进程 ID,然后创建一个字典,把这些进程 ID 和对应的子进程对象关联起来。接着调用 os.wait,这个函数会等待 任何一个 子进程结束,然后你可以用你的字典把返回的进程 ID 对应到正确的子进程上。如果你想要更精确的控制,可以使用 os.waitpidos.wait3os.wait4(Python 的文档没有详细解释这些是怎么工作的,但据我所知,它们直接对应于 waitpidwait4 系统调用,所以你可以参考这些文档作为指导)。

撰写回答