Python Glossary English

все Python 3threadingпонятие

threading.Lock

синхронизация

Примитив взаимного исключения (мьютекс). Гарантирует, что только один поток в момент времени выполняет защищённый блок кода.

Синтаксис

lock = threading.Lock()
lock.acquire() / lock.release()
with lock: ...

Lock нереентрантный: если тот же поток попытается захватить его второй раз, не отпустив первый (в рекурсии или во вложенном методе под тем же локом), он заблокирует сам себя навсегда — ровно для этого случая существует RLock. Всегда бери его через with lock:, иначе исключение внутри блока оставит лок незакрытым и остальные потоки повиснут.

Примеры

import threading
lock = threading.Lock()
counter = 0
def increment():
    global counter
    with lock:          # автоматический release
        counter += 1
threads = [threading.Thread(target=increment) for _ in range(100)]
for t in threads: t.start()
for t in threads: t.join()
print(counter)  # 100

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности