python - 何时在 python 的线程模块中使用事件/条件/锁/信号量?

标签 python multithreading synchronization locking

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/

    相关文章:

    python - 当我使用 threading.Lock 锁定线程操作时,为什么它的输出不为 0?

    android - 哈希表 : How can use it with 2/3 different thread?

    Java 同步未按(我)预期工作

    multithreading - 如何制作原子指令

    python - 在 crfsuite 中使用标签作为属性

    Python dateutil parser.parse ("On") 与今天一样

    python - 使用不同的 y 轴绘制 pandas 数据框中的条形图和线条

    python - 使用 Python Keras 训练 CNN 1D 时出现 AttributeError

    c# - 线程安全和通用数组列表?

    java - 可运行代码正在循环其操作