threading.Semaphore
一个信号量管理一个内部计数器,该计数器因 acquire() 方法的调用而递减,因 release() 方法的调用而递增。 计数器的值永远不会小于零;当 acquire() 方法发现计数器为零时,将会阻塞,直到其它线程调用 release() 方法。
信号量对象也支持 上下文管理协议 。(可以用with)
class threading.Semaphore(value=1)
该类实现信号量对象。信号量对象管理一个原子性的计数器,代表 release() 方法的调用次数减去 acquire() 的调用次数再加上一个初始值。如果需要, acquire() 方法将会阻塞直到可以返回而不会使得计数器变成负数。在没有显式给出 value 的值时,默认为1。
可选参数 value 赋予内部计数器初始值,默认值为 1 。如果 value 被赋予小于0的值,将会引发 ValueError 异常。
acquire(blocking=True, timeout=None)
获取一个信号量。
在不带参数的情况下调用时:
如果在进入时内部计数器的值大于零,则将其减一并立即返回 True.
如果在进入时内部计数器的值为零,则将会阻塞直到被对 release() 的调用唤醒。 一旦被唤醒(并且计数器的值大于 0),则将计数器减 1 并返回 True。 每次对 release() 的调用将只唤醒一个线程。 线程被唤醒的次序是不可确定的。
当发起调用时将 blocking 设为假值,则不进行阻塞。 如果一个无参数调用将要阻塞,则立即返回 False;在其他情况下,执行与无参数调用时一样的操作,然后返回 True。
当发起调用时如果 timeout 不为 None,则它将阻塞最多 timeout 秒。 请求在此时段时未能成功完成获取则将返回 False。 在其他情况下返回 True。
release()
释放一个
Python多线程:Semaphore信号量详解与使用

本文介绍了Python中的线程信号量Semaphore,包括其如何在多线程中控制资源访问,如何通过acquire和release方法管理内部计数器,以及支持的上下文管理协议。此外,还提到了非阻塞获取和超时设置的功能。
最低0.47元/天 解锁文章
672

被折叠的 条评论
为什么被折叠?



