Встречается на собеседованиях • сегодня

Как работает защита от многопоточности (multithreading) в Python

В Python используется механизм GIL (Global Interpreter Lock), который предотвращает одновременное выполнение байт-кода несколькими потоками. Это означает, что в любой момент времени только один поток может исполнять Python-код, даже на многоядерных процессорах.

Особенности:

  • GIL не мешает потокам работать с I/O-операциями (например, чтение файлов, сетевые запросы), так как они освобождают GIL.
  • Для CPU-интенсивных задач лучше использовать multiprocessing или асинхронность (asyncio).
  • GIL не влияет на C-расширения, которые могут освобождать его вручную.

Пример:

python
import threading

counter = 0

def increment():
    global counter
    for _ in range(100000):
        counter += 1  # Небезопасно из-за GIL (но проблема в атомарности операций)

threads = [threading.Thread(target=increment) for _ in range(10)]
for t in threads:
    t.start()
for t in threads:
    t.join()

print(counter)  # Может быть меньше 1_000_000 из-за race condition

Для потокобезопасности используйте Lock:

python
lock = threading.Lock()
with lock:
    counter += 1
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы