Python 提供 4 different synchronizing mechanisms在线程模块中:事件/条件/锁定(RLock)/信号量。
我知道它们可用于同步线程之间共享资源/关键部分的访问。但我不太确定何时使用哪个。
它们可以互换使用吗?或者他们中的一些人是“更高层次的”,使用其他人作为构建 block ?如果是这样,哪些是建立在哪个之上的?
如果有人可以举例说明,那就太好了。
最佳答案
This article可能包含您需要的所有信息。这个问题确实很广泛,但让我试着解释一下我是如何使用每个作为例子的:
Event
- 当您需要线程来传达满足特定状态时使用它,以便它们可以同步工作。我主要将它用于两个线程的启动过程,其中一个线程依赖于另一个线程。示例:客户端有一个线程管理器,它的
__init__()
需要知道管理器在继续之前完成了一些属性的实例化。 Lock/RLock
- 当您使用共享资源并且想要确保没有其他线程正在读取/写入它时使用它。尽管我认为虽然在写入之前锁定是强制性的,但在读取之前锁定可能是可选的。但最好确保在您读/写时,没有其他线程同时修改它。 RLock
有能力被其所有者多次收购,release()
必须调用相同的次数 acquire()
是为了让它被另一个试图获取它的线程使用。 我没用过
Condition
这么多,坦率地说从来不用Semaphore
,所以这个答案有编辑和改进的余地。
关于python - 何时在 python 的线程模块中使用事件/条件/锁/信号量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31644663/