threading.Condition vs threading.Event

时间:2011-09-15 00:29:45

标签: python multithreading concurrency condition-variable

我还没有找到 Condition 模块中Eventthreading类之间差异的明确解释。是否有一个明确的用例,其中一个比另一个更有帮助?我可以找到的所有示例都使用生产者 - 消费者模型作为示例,其中queue.Queue将是更直接的解决方案。

2 个答案:

答案 0 :(得分:51)

简单地说,当线程有兴趣等待某些事情变为真时,你使用条件,,一旦真实,就可以拥有对某些共享资源的独占访问权。

当线程只想等待某些事情变为真时,你会使用一个事件。

本质上,Condition是一个抽象的Event + Lock,但是当你考虑到你可以在同一个底层锁上有几个不同的条件时,它会变得更有趣。因此,您可以使用不同的条件来描述底层资源的状态,这意味着您可以唤醒仅对共享资源的特定状态感兴趣的工作者。

答案 1 :(得分:2)

另一个微妙的区别是Event的{​​{1}}影响了set()的未来调用(也就是说,后续wait()的调用将返回wait()并赢得在调用True之前不会阻塞),而clear()的{​​{1}}(或Condition)不会阻塞(notify()的后续调用将阻塞到下一个notify_all()的调用。