我还没有找到 Condition
模块中Event
和threading
类之间差异的明确解释。是否有一个明确的用例,其中一个比另一个更有帮助?我可以找到的所有示例都使用生产者 - 消费者模型作为示例,其中queue.Queue
将是更直接的解决方案。
答案 0 :(得分:51)
简单地说,当线程有兴趣等待某些事情变为真时,你使用条件,,一旦真实,就可以拥有对某些共享资源的独占访问权。
当线程只想等待某些事情变为真时,你会使用一个事件。
本质上,Condition是一个抽象的Event + Lock,但是当你考虑到你可以在同一个底层锁上有几个不同的条件时,它会变得更有趣。因此,您可以使用不同的条件来描述底层资源的状态,这意味着您可以唤醒仅对共享资源的特定状态感兴趣的工作者。
答案 1 :(得分:2)
另一个微妙的区别是Event
的{{1}}影响了set()
的未来调用(也就是说,后续wait()
的调用将返回wait()
并赢得在调用True
之前不会阻塞),而clear()
的{{1}}(或Condition
)不会阻塞(notify()
的后续调用将阻塞到下一个notify_all()
的调用。