我正在尝试同时等待多个多处理事件中的任何一个,所以我想出了这样的代码:
if e1.wait(timeout) or e2.wait(timeout):
# this part will be reached if either of both
# events is set or the wait timed out
它的作用就像评论所说的那样。但这是如何工作的?是if
轮询机器人方法吗?或者只要一个事件被设置就被调用?
奖金问题:是否有一些聪明的方法来调整代码以等待任意数量的事件,即事件列表? if True in [e1.wait(timeout),e2.wait(timeout)]
无效。{/ p>
答案 0 :(得分:1)
它只等待第一个。这是由于python对short circuiting的支持。
答案 1 :(得分:0)
等待线程或进程阻塞,因此它将阻止当前线程继续进行,直到超时或线程完成。 Python中if
的语义是短路的,这意味着如果第一个返回true,那么第二个将不会被调用 - simonzack说。
等待多个线程对于各种线程来说很难实现和维护。我建议你使用Message传递,并让每个进程在完成后向队列发送消息。这样你就可以检查队列是否是'len(n)',其中'n'是线程/进程的数量。点击此处Queues in multiprocessing