> Что такое дедлоки? (Python)
Уровень: junior · Роль: backend · Язык: Python · Категория: Технические вопросы
Компании: HeadHunter
Стек: Python
> Пример ответа
Дедлок (deadlock) - это ситуация в многопоточном или многопроцессном программировании, когда два или более потоков (или процессов) бесконечно ожидают освобождения ресурсов, захваченных друг другом, и ни один из них не может продолжить выполнение. В Python дедлоки часто возникают при использовании блокировок (например, threading.Lock).
Пример дедлока на Python:
PYTHONimport threadinglock1 = threading.Lock()lock2 = threading.Lock()def thread1():lock1.acquire()print("Thread 1: захватил lock1")# Имитация работыimport time; time.sleep(0.1)lock2.acquire()print("Thread 1: захватил lock2")lock2.release()lock1.release()def thread2():lock2.acquire()print("Thread 2: захватил lock2")time.sleep(0.1)lock1.acquire()print("Thread 2: захватил lock1")lock1.release()lock2.release()t1 = threading.Thread(target=thread1)t2 = threading.Thread(target=thread2)t1.start()t2.start()t1.join()t2.join()
Здесь thread1 захватывает lock1 и ждет lock2, а thread2 захватывает lock2 и ждет lock1 - программа зависает.
Для предотвращения дедлоков используют:
- Упорядоченное захватывание блокировок (всегда захватывать в одном порядке).
- Тайм-ауты (например,
lock.acquire(timeout=1)). - Использование
threading.RLock(рекурсивная блокировка) в некоторых случаях. - Применение более высокоуровневых конструкций, таких как
queue.Queueилиconcurrent.futures.
> Похожие задачи по Python
Как обойти блокировку при вызове синхронной функции в асинхронном коде в Python?
Что является верхнеуровневым и низкоуровневым компонентом в системах на SOLID?
Какие решения кроме паттерна outbox помогают гарантировать выполнение асинхронных задач?
Как работает периодический таск, который читает таблицу уведомлений и отправляет их?
> Похожие задачи по backend
Как обойти блокировку при вызове синхронной функции в асинхронном коде в Python?
Что является верхнеуровневым и низкоуровневым компонентом в системах на SOLID?
Какие решения кроме паттерна outbox помогают гарантировать выполнение асинхронных задач?
Как работает периодический таск, который читает таблицу уведомлений и отправляет их?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью