Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: rlock, lock

В каких сценариях следует использовать RLock вместо Lock?

Вопрос проверяет понимание рекурсивных блокировок и умение предотвращать deadlock в более сложной логике потоков.

Короткий ответ

RLock используют, когда один и тот же поток может повторно захватывать блокировку. Это часто происходит при вложенных вызовах функций или рекурсии. Обычный Lock в таких случаях приведёт к deadlock. RLock отслеживает, сколько раз поток захватил блокировку. Это делает код безопаснее, но чуть менее производительным.

Длинный ответ

На практике блокировки редко используются в изолированных функциях. Чаще одна защищённая функция вызывает другую, которая тоже работает с общими данными.

Проблема с Lock во вложенных вызовах

Определение:
Deadlock — это ситуация, когда поток навсегда ждёт освобождения ресурса, который он сам удерживает.

Пример проблемы:

from threading import Lock

lock = Lock()

def outer():
    with lock:
        inner()

def inner():
    with lock:  # deadlock
        pass

Здесь один и тот же поток пытается захватить Lock повторно и зависает.

Как RLock решает эту проблему

RLock запоминает:

  • Какой поток владеет блокировкой

  • Сколько раз она была захвачена

Пример:

from threading import RLock

lock = RLock()

def outer():
    with lock:
        inner()

def inner():
    with lock:
        pass

Типичные сценарии использования RLock

  1. Рекурсивные функции

  2. Вложенные методы одного класса

  3. Переиспользуемые функции с общей блокировкой

  4. Сложная бизнес-логика с цепочкой вызовов

Ограничения

  • Медленнее Lock

  • Легче скрыть ошибки проектирования

Вывод:
Используй RLock, когда невозможно гарантировать, что блокировка будет захвачена только один раз в одном потоке.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    5

Навыки

  • Python

    Python

Ключевые слова

#rlock

#lock

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.