Карточка Middle GIL, потоки и процессы обновлено
Lock против RLock
Вопрос
Чем threading.RLock отличается от Lock?
Попробуйте сами
Ответьте про себя или вслух, потом откройте ответ и сверьтесь.
Показать ответ и разбор
Коротко
RLock можно захватить повторно тем же потоком (ведётся счётчик), освободить нужно столько же раз. Обычный Lock при повторном захвате тем же потоком заблокирует его навсегда.
Ответ
RLock можно захватить повторно тем же потоком (ведётся счётчик), освободить нужно столько же раз. Обычный Lock при повторном захвате тем же потоком заблокирует его навсегда.
Разбор
RLock нужен, когда метод под блокировкой вызывает другой метод, берущий ту же блокировку. Но часто это признак, что стоит пересмотреть структуру кода.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «GIL, потоки и процессы»
- Выбор между потоками, процессами и asyncio
- Найти риск взаимной блокировки
- Время работы пула с ограничением параллелизма
- Смоделировать потерю обновления
- Потоки для CPU-bound задачи
- Как избежать взаимной блокировки
- concurrent.futures
- Free-threaded CPython в 3.13 и 3.14