threading.Condition vs threading.Event

Par*_*ult 39 python concurrency multithreading condition-variable

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

don*_*mus 57

简而言之,当线程有兴趣等待某些事情变为真时,您使用条件,并且一旦它成立,就可以对某些共享资源进行独占访问.

而当线程只对等待某些事情变为真实感兴趣时,您使用事件.

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


Era*_*man 8

另一个微妙的区别是Event'sset()影响 的未来调用wait()(即,后续的wait()will调用将返回True并且不会阻塞直到clear()被调用),而Condition's notify()(or notify_all()) 不会(后续调用wait()will 阻塞直到下一次调用notify()) .