Что делает asyncio.gather и через какое время вернётся результат, если две async-функции выполняются 5 и 15 секунд соответственно, но содержат только CPU-bound вычисления без await?

Если обе корутины выполняют только CPU-код и не уступают управление, gather не даст параллелизма: суммарное время будет около 20 секунд, плюс накладные расходы.

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

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

Если обе корутины выполняют только CPU-код и не уступают управление, gather не даст параллелизма: суммарное время будет около 20 секунд, плюс накладные расходы.

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

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

Если обе корутины выполняют только CPU-код и не уступают управление, gather не даст параллелизма: суммарное время будет около 20 секунд, плюс накладные расходы.

gather планирует awaitable-объекты конкурентно и собирает результаты, но один event loop не может переключить coroutine посреди обычного непрерывного Python-кода. Первая выполнится примерно за 5 секунд, другая — за 15, хотя конкретный порядок начала не является главным условием ответа. Чтобы использовать несколько ядер для такого Python-кода, обычно применяют process pool или нативную библиотеку, освобождающую GIL. Замена def на async def не ускоряет вычисления.

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

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

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

Подробнее