mutex — модуль mutex

Модуль mutex предоставляет примитив взаимного исключения для защиты критических секций кода или общих данных от одновременного доступа со стороны обработчика прерываний и главного потока.

Захват и освобождение блокировки выполняются через контекстный менеджер (оператор with), который блокируется до тех пор, пока mutex не станет доступен. Также предоставляется неблокирующий метод Mutex.test().

Пример:

from mutex import Mutex

mtx = Mutex()

# Acquire for a critical section (blocks if already held).
with mtx:
    # ... protected code, e.g. shared buffer access ...
    pass

# Or try without blocking.
if mtx.test():
    try:
        # ... protected code ...
        pass
    finally:
        mtx.release()

class Mutex — объект mutex

class mutex.Mutex

Создаёт разблокированный объект mutex.

release() None

Разблокирует mutex. Возбуждает mutex.MutexException, если mutex в данный момент не заблокирован.

test() bool

Пытается захватить mutex неблокирующим способом. Возвращает True при успехе и False, если mutex уже заблокирован.

Чтобы захватить mutex блокирующим способом, используйте экземпляр как контекстный менеджер (оператор with). Mutex автоматически освобождается при выходе.

Исключения

exception mutex.MutexException

Подкласс OSError. Возбуждается методом Mutex.release, когда mutex уже разблокирован.