蟒蛇是否'如果'轮询?

时间:2014-10-23 15:00:04

标签: python events if-statement

我正在尝试同时等待多个多处理事件中的任何一个,所以我想出了这样的代码:

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>

2 个答案:

答案 0 :(得分:1)

它只等待第一个。这是由于python对short circuiting的支持。

答案 1 :(得分:0)

等待线程或进程阻塞,因此它将阻止当前线程继续进行,直到超时或线程完成。 Python中if的语义是短路的,这意味着如果第一个返回true,那么第二个将不会被调用 - simonzack说。

等待多个线程对于各种线程来说很难实现和维护。我建议你使用Message传递,并让每个进程在完成后向队列发送消息。这样你就可以检查队列是否是'len(n)',其中'n'是线程/进程的数量。点击此处Queues in multiprocessing