Хабы: Программирование, Python
В стандартной библиотеке языка Python имеется базовый примитив синхронизации — реентерабельная блокировка. Она позволяет одному и тому же потоку, несколько раз захватить блокировку. Стандартная реализация может использовать для блокировки мьютекс или семафор, и их захват всегда приводит к вызову функции из ядра ОС.
Используя GIL (Global Interpreter Lock - Глобальная блокировка интерпретатора) и особенности реализации Threading.Lock.release можно создать более быстрый вариант.
Давайте попробуем разобраться