我还没有找到对模块中Condition
和Event
类之间差异的清晰解释。threading
是否有一个明确的用例,其中一个比另一个更有帮助?我能找到的所有示例都使用生产者-消费者模型作为示例,哪里queue.Queue
是更直接的解决方案。
问问题
14678 次
2 回答
79
简而言之,当线程有兴趣等待某事变为真时,您使用条件,一旦变为真,就可以独占访问某些共享资源。
而当线程只是对等待某事变为真的感兴趣时,您会使用事件。
本质上,Condition 是一个抽象的 Event + Lock,但是当您考虑到您可以在同一个底层锁上拥有多个不同的条件时,它会变得更加有趣。因此,您可以有不同的条件来描述底层资源的状态,这意味着您可以唤醒只对共享资源的特定状态感兴趣的工作人员。
于 2011-09-15T01:11:39.463 回答
10
另一个细微的区别是Event
'sset()
影响未来的调用wait()
(即,后续调用wait()
将返回True
并且不会阻塞,直到clear()
被调用),而Condition
's notify()
(或notify_all()
)不会(后续调用wait()
将阻塞,直到下一次调用notify()
) .
于 2018-09-30T13:41:24.287 回答