This document is for Kombu's development version, which can be significantly different from previous releases. Get the stable docs here: 5.0.

信号量- kombu.asynchronous.semaphore

信号量和并发原语。

class kombu.asynchronous.semaphore.DummyLock[源代码]

假装是一把锁。

class kombu.asynchronous.semaphore.LaxBoundedSemaphore(value: int)[源代码]

异步有界信号量。

Lax意味着,即使释放的次数比获取的次数多,该值也将保持在指定的范围内。

示例:

>>> x = LaxBoundedSemaphore(2)
>>> x.acquire(print, 'HELLO 1')
HELLO 1
>>> x.acquire(print, 'HELLO 2')
HELLO 2
>>> x.acquire(print, 'HELLO 3')
>>> x._waiters   # private, do not access directly
[print, ('HELLO 3',)]
>>> x.release()
HELLO 3
acquire(callback: ~typing.Callable[[~P], None], *partial_args: ~typing.~P, **partial_kwargs: ~typing.~P) bool[源代码]

获取信号量。

这将立即生效 callback 如果资源可用,则回调将挂起,直到释放信号量。

论点:

回调(Callable):要应用的回调。*PARTIAL_ARGS(ANY):回调的部分参数。

clear() None[源代码]

重置信号量,这也会清除所有等待的回调。

grow(n: int = 1) None[源代码]

更改信号量的大小以接受更多用户。

release() None[源代码]

释放信号量。

注:

如果有任何服务员,这将适用于等待资源的第一个服务员(FIFO顺序)。

shrink(n: int = 1) None[源代码]

更改信号量的大小以接受较少的用户。