[英]When to use event/condition/lock/semaphore in python's threading module?
Python在线程模块中提供了4种不同的同步机制 :事件/条件/锁定(RLock)/信号量。
我知道它们可以用于同步线程之间共享资源/关键部分的访问。 但我不太清楚何时使用哪个。
它们可以互换使用吗? 或者其中一些是“更高级别”,使用其他人作为构建块? 如果是这样,哪些是建立在哪?
如果有人可以用一些例子来说明,那就太好了。
本文可能包含您需要的所有信息。 问题确实非常广泛,但让我试着解释一下我如何使用每个作为一个例子:
Event
- 当您需要线程来传达特定状态时使用它,以便它们可以同步工作。 我主要用于两个线程的启动过程,其中一个线程依赖于另一个线程。
示例 :客户端具有线程管理器,并且其__init__()
需要知道管理器在可以继续之前实例化某些属性。
Lock/RLock
- 在使用共享资源时使用它,并且您希望确保没有其他线程正在读取/写入它。 虽然我认为虽然在写入之前锁定是强制性的,但在读取之前锁定可能是可选的。 但是,确保在读/写时没有其他线程同时修改它是很好的。 RLock
必须由其所有者获得多次的能力, release()
必须被调用相同数量的次acquire()
是为了使其由另一个线程试图获取它被使用。
我没有那么多使用Condition
,坦率地说从未使用过Semaphore
,所以这个答案有编辑和改进的空间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.