> Что такое дедлоки? (Python)

Уровень: junior · Роль: backend · Язык: Python · Категория: Технические вопросы

Компании: HeadHunter

Стек: Python

> Пример ответа

Дедлок (deadlock) - это ситуация в многопоточном или многопроцессном программировании, когда два или более потоков (или процессов) бесконечно ожидают освобождения ресурсов, захваченных друг другом, и ни один из них не может продолжить выполнение. В Python дедлоки часто возникают при использовании блокировок (например, threading.Lock).

Пример дедлока на Python:

PYTHON
import threading
lock1 = 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.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью