繁体   English   中英

何时在python的线程模块中使用event / condition / lock / semaphore?

[英]When to use event/condition/lock/semaphore in python's threading module?

Python在线程模块中提供了4种不同的同步机制 :事件/条件/锁定(RLock)/信号量。

我知道它们可以用于同步线程之间共享资源/关键部分的访问。 但我不太清楚何时使用哪个。

它们可以互换使用吗? 或者其中一些是“更高级别”,使用其他人作为构建块? 如果是这样,哪些是建立在哪?

如果有人可以用一些例子来说明,那就太好了。

本文可能包含您需要的所有信息。 问题确实非常广泛,但让我试着解释一下我如何使用每个作为一个例子:

  1. Event - 当您需要线程来传达特定状态时使用它,以便它们可以同步工作。 我主要用于两个线程的启动过程,其中一个线程依赖于另一个线程。

    示例 :客户端具有线程管理器,并且其__init__()需要知道管理器在可以继续之前实例化某些属性。

  2. Lock/RLock - 在使用共享资源时使用它,并且您希望确保没有其他线程正在读取/写入它。 虽然我认为虽然在写入之前锁定是强制性的,但在读取之前锁定可能是可选的。 但是,确保在读/写时没有其他线程同时修改它是很好的。 RLock必须由其所有者获得多次的能力, release()必须被调用相同数量的次acquire()是为了使其由另一个线程试图获取它被使用。

我没有那么多使用Condition ,坦率地说从未使用过Semaphore ,所以这个答案有编辑和改进的空间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM