asyncio.Lock

class asyncio.Lock(*, loop=None)

Primitive lock objects.

A primitive lock is a synchronization primitive that is not owned by a particular coroutine when locked. A primitive lock is in one of two states, ‘locked’ or ‘unlocked’.

It is created in the unlocked state. It has two basic methods, acquire() and release(). When the state is unlocked, acquire() changes the state to locked and returns immediately. When the state is locked, acquire() blocks until a call to release() in another coroutine changes it to unlocked, then the acquire() call resets it to locked and returns. The release() method should only be called in the locked state; it changes the state to unlocked and returns immediately. If an attempt is made to release an unlocked lock, a RuntimeError will be raised.

When more than one coroutine is blocked in acquire() waiting for the state to turn to unlocked, only one coroutine proceeds when a release() call resets the state to unlocked; first coroutine which is blocked in acquire() is being processed.

acquire() is a coroutine and should be called with yield from.

Locks also support the context management protocol. (yield from lock) should be used as the context manager expression.

This class is not thread safe.

Usage:

lock = Lock()
...
yield from lock
try:
    ...
finally:
    lock.release()

Context manager usage:

lock = Lock()
...
with (yield from lock):
    ...

Lock objects can be tested for locking state:

if not lock.locked():
    yield from lock
else:
    # lock is acquired
    ...
locked()

Return True if the lock is acquired.

coroutine acquire()

Acquire a lock.

This method blocks until the lock is unlocked, then sets it to locked and returns True.

This method is a coroutine.

release()

Release a lock.

When the lock is locked, reset it to unlocked, and return. If any other coroutines are blocked waiting for the lock to become unlocked, allow exactly one of them to proceed.

When invoked on an unlocked lock, a RuntimeError is raised.

There is no return value.

doc_python
2016-10-07 17:26:52
Comments
Leave a Comment

Please login to continue.