GIL не мешает конкурентному ожиданию сети и БД. Бэкенд использует async I/O, потоки для блокирующих операций и несколько worker-процессов для параллельного выполнения Python-кода.
В Python есть GIL — как тогда бэкенд обрабатывает много одновременных запросов?
GIL не мешает конкурентному ожиданию сети и БД. Бэкенд использует async I/O, потоки для блокирующих операций и несколько worker-процессов для параллельного выполнения Python-кода.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
GIL не мешает конкурентному ожиданию сети и БД. Бэкенд использует async I/O, потоки для блокирующих операций и несколько worker-процессов для параллельного выполнения Python-кода.
В обычной сборке CPython один поток исполняет Python-байткод в интерпретаторе в конкретный момент, но при ожидании многих I/O-операций GIL освобождается. Event loop переключается между задачами, когда они добровольно передают управление. Несколько процессов имеют отдельные интерпретаторы и могут использовать разные ядра. CPU-heavy функцию нельзя просто поместить в async def и ожидать ускорения: её выносят в процессы или подходящий нативный код. Реальная конкурентность также ограничена пулами подключений и ресурсами downstream-сервисов.