This document describes the current stable version of Kombu (4.0). For development docs, go here.

Semaphores - kombu.async.semaphore

Semaphores and concurrency primitives.

class kombu.async.semaphore.DummyLock[source]

Pretending to be a lock.

class kombu.async.semaphore.LaxBoundedSemaphore(value)[source]

Asynchronous Bounded Semaphore.

Lax means that the value will stay within the specified range even if released more times than it was acquired.

Example

>>> from future import print_statement as printf
# ^ ignore: just fooling stupid pyflakes
>>> x = LaxBoundedSemaphore(2)
>>> x.acquire(printf, 'HELLO 1')
HELLO 1
>>> x.acquire(printf, 'HELLO 2')
HELLO 2
>>> x.acquire(printf, 'HELLO 3')
>>> x._waiters   # private, do not access directly
[print, ('HELLO 3',)]
>>> x.release()
HELLO 3
acquire(callback, *partial_args, **partial_kwargs)[source]

Acquire semaphore.

This will immediately apply callback if the resource is available, otherwise the callback is suspended until the semaphore is released.

Parameters:
  • callback (Callable) – The callback to apply.
  • *partial_args (Any) – partial arguments to callback.
clear()[source]

Reset the semaphore, which also wipes out any waiting callbacks.

grow(n=1)[source]

Change the size of the semaphore to accept more users.

release()[source]

Release semaphore.

Note

If there are any waiters this will apply the first waiter that is waiting for the resource (FIFO order).

shrink(n=1)[source]

Change the size of the semaphore to accept less users.