我还没有找到threading模块中Condition类和Event类之间的区别的明确解释。是否有一个明确的用例,其中一个会比另一个更有帮助?我可以找到的所有示例都以生产者-消费者模型为例,其中queue.Queue将是更直接的解决方案。
发布于 2011-09-15 01:11:39
简单地说,您使用的条件是,当线程有兴趣等待某件事情变为真时,(一旦为真)可以独占地访问某些共享资源。
而当线程只想等待某件事情变成真的时,就会使用一个事件。
从本质上说,条件是一个抽象的事件+锁,但是当您考虑到在同一个基础锁上可以有几个不同的条件时,它会变得更有趣。因此,您可能有不同的条件描述底层资源的状态,这意味着您可以唤醒只对共享资源的特定状态感兴趣的工作人员。
发布于 2018-09-30 13:41:24
另一个微妙的区别是,Event的set()会影响wait()的未来调用(也就是说,wait()的后续调用将返回True,在调用clear()之前不会阻塞),而Condition的notify() (或notify_all())则不会( wait()的后续调用直到notify()的下一次调用才会阻塞)。
https://stackoverflow.com/questions/7424590
复制相似问题