如何等待多处理事件列表中的任何一个

时间:2019-06-30 12:38:43

标签: python python-3.x multithreading multiprocessing python-multiprocessing

假设我有一个活动列表,我可以打电话

event[i].wait()
# Do something

等待索引i处的事件。

但是,当我执行此操作时,我仅等待单个事件,却不知道其他事件处于什么状态。因此,如果要检查整个列表以设置第一个事件,则可以执行以下操作。< / p>

    while True:
        for event in events:
            if event.is_set():
                # Do something

但是,这会占用大量CPU时间,不断检查每个项目。避免在单个Event对象上使用标准的wait方法。 python中是否有一种方法可以检查所有这些事件,以使第一个状态发生变化而无需在CPU上施加压力呢?

可以使用队列。但这涉及(AFAIK)腌制队列项目以将其传递给下一个流程。速度在我的程序中很重要,我正在使用共享的ctypes在进程之间传递字符串,这与我使用的大小相比要快得多。我使用事件列表来通知何时可以访问共享的ctype字符串。

我想过的一种方法是使用一个Queue,但要让它包含非常少量的数据,例如一个简单的int来表示已准备好特定的ctype。但我想看看是否有更好的直观方法来解决此问题。而且这种方法似乎还需要花费一段时间。

0 个答案:

没有答案