Почему всё-таки работает многопоточность с IO-bound задачами, несмотря на GIL?

При многих блокирующих I/O-операциях CPython освобождает GIL. Пока один поток ждёт сеть или диск, другой может исполнять Python-код или начать своё ожидание.

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

Что ответить на собеседовании

При многих блокирующих I/O-операциях CPython освобождает GIL. Пока один поток ждёт сеть или диск, другой может исполнять Python-код или начать своё ожидание.

Подробный разбор

Ответ с пояснениями

При многих блокирующих I/O-операциях CPython освобождает GIL. Пока один поток ждёт сеть или диск, другой может исполнять Python-код или начать своё ожидание.

Поэтому несколько запросов к независимым внешним сервисам могут завершаться быстрее, чем последовательная обработка. Это перекрытие ожиданий, а не одновременное исполнение Python-байткода несколькими ядрами в обычной GIL-сборке.

Если после получения данных основное время уходит на CPU-обработку Python, ускорение ограничено. Библиотека также должна корректно освобождать GIL на ожидании. Ограничивайте число потоков, задавайте timeout и защищайте разделяемое состояние: наличие GIL не заменяет бизнес-синхронизацию.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее