Да: особенно если C-расширение долго удерживает GIL, не освобождая его. Обычный CPU-bound Python-код в сборке с GIL переключается между потоками, но не даёт им параллельно выполнять байт-код.
Может ли CPU-bound задача надолго не дать другим потокам Python выполняться?
Да: особенно если C-расширение долго удерживает GIL, не освобождая его. Обычный CPU-bound Python-код в сборке с GIL переключается между потоками, но не даёт им параллельно выполнять байт-код.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Да: особенно если C-расширение долго удерживает GIL, не освобождая его. Обычный CPU-bound Python-код в сборке с GIL переключается между потоками, но не даёт им параллельно выполнять байт-код.
Интервал переключения не является жёсткой гарантией максимальной задержки: влияют C-код и планировщик ОС. Некоторые вычислительные библиотеки отпускают GIL и могут работать параллельно; free-threaded сборки имеют другую модель. Для чистого Python CPU-задачи часто изолируют процессами. Если тяжёлая работа выполняется прямо в потоке event loop, coroutine этого loop не продвинутся до возврата управления, даже если другие OS-потоки продолжают работать.