Блокировка — один из фундаментальных механизмов синхронизации в threading. Зачастую блокировки используются для доступа к разделяемым ресурсам.
Для каждого такого разделяемого ресурса нам нужно создать объект типа Lock и, когда нам потребуется доступ к ресурсу, следует вызвать acquire, что бы взять контроль над блокировкой.
В том случае когда нам потребуется освободить блокировку, то мы вызываем release. Стоит учесть то, что блокировку стоит освобождать даже в случае возникновения ошибок. Для этого можно использовать try-finally.
Также все это можно заменить через оператор with. Оператор with автоматически захватывает блокировку перед входом в блок, и освобождает её после выхода.
Интерактивный пример — тут. Ссылка документация — тут.
#threading