python多线程-Semaphore(信号对象)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python多线程-Semaphore(信号对象)相关的知识,希望对你有一定的参考价值。

参考技术A

Semaphore 对象内部管理一个计数器,该计数器由每个 acquire() 调用递减,并由每个 release() 调用递增。计数器永远不会低于零,当 acquire() 发现计数器为零时,线程阻塞,等待其他线程调用 release() 。
Semaphore 对象支持上下文管理协议。
方法:
acquire(blocking=True, timeout=None)
获取信号。
当 blocking=True 时:如果调用时计数器大于零,则将其减1并立即返回。如果在调用时计数器为零,则阻塞并等待,直到其他线程调用 release() 使其大于零。这是通过适当的互锁来完成的,因此如果多个 acquire() 被阻塞, release() 将只唤醒其中一个,这个过程会随机选择一个,因此不应该依赖阻塞线程的被唤醒顺序。
返回值为 True 。
当 blocking=False 时,不会阻塞。如果调用 acquire() 时计数器为零,则会立即返回 False .
如果设置了 timeout 参数,它将阻塞最多 timeout 秒。如果在该时间段内没有获取锁,则返回 False ,否则返回 True 。

release()
释放信号,使计数器递增1。当计数器为零并有另一个线程等待计数器大于零时,唤醒该线程。

实现有界信号对象。有界信号对象确保计数器不超过初始值 value ,否则抛出 ValueError 。
大多数情况下,该对象用于保护有限容量的资源。

栗子:

运行结果:

可以看到 Thread-3 是在 Thread-0 释放后才获得信号对象。

以上是关于python多线程-Semaphore(信号对象)的主要内容,如果未能解决你的问题,请参考以下文章

python多线程编程—同步原语入门(锁Lock信号量(Bounded)Semaphore)

java多线程系列:Semaphore和Exchanger

009-多线程-锁-JUC锁-Semaphore 信号量

iOS-多线程dispatch_semaphore_t dispatch_queue_t dispatch_group_t常见用法场景

python多线程同步机制Semaphore

Python 线程信号量 semaphore