Если обе корутины выполняют только CPU-код и не уступают управление, gather не даст параллелизма: суммарное время будет около 20 секунд, плюс накладные расходы.
Что делает asyncio.gather и через какое время вернётся результат, если две async-функции выполняются 5 и 15 секунд соответственно, но содержат только CPU-bound вычисления без await?
Если обе корутины выполняют только CPU-код и не уступают управление, gather не даст параллелизма: суммарное время будет около 20 секунд, плюс накладные расходы.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Если обе корутины выполняют только CPU-код и не уступают управление, gather не даст параллелизма: суммарное время будет около 20 секунд, плюс накладные расходы.
gather планирует awaitable-объекты конкурентно и собирает результаты, но один event loop не может переключить coroutine посреди обычного непрерывного Python-кода. Первая выполнится примерно за 5 секунд, другая — за 15, хотя конкретный порядок начала не является главным условием ответа. Чтобы использовать несколько ядер для такого Python-кода, обычно применяют process pool или нативную библиотеку, освобождающую GIL. Замена def на async def не ускоряет вычисления.