Порядок вывода чисел в asyncio‑корутине

При наличии import asyncio порядок будет 1, 3, 2. main-подобная run_all ждёт завершения coroutine_a, затем печатает 3 и только после этого запускает coroutine_b.

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

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

При наличии import asyncio порядок будет 1, 3, 2. main-подобная run_all ждёт завершения coroutine_a, затем печатает 3 и только после этого запускает coroutine_b.

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

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

Условие

Определите, в каком порядке появятся цифры в консоли при запуске следующего Python‑кода.

# asyncio / multiprocessing / threading

async def coroutine_a():
    await asyncio.sleep(1000000)
    print('1')

async def coroutine_b():
    await asyncio.sleep(1)
    print('2')

async def run_all():
    await coroutine_a()
    print('3')
    await coroutine_b()

asyncio.run(run_all())

Ответ

При наличии import asyncio порядок будет 1, 3, 2. main-подобная run_all ждёт завершения coroutine_a, затем печатает 3 и только после этого запускает coroutine_b.

Первый sleep длится 1 000 000 секунд, поэтому до вывода 1 проходит очень много времени. После его окончания coroutine_a печатает 1 и возвращает управление run_all. Та печатает 3 и ожидает coroutine_b, которая через секунду выводит 2.

Последовательные await не создают конкурентность между этими корутинами. Для параллельного ожидания потребовались бы create_task/gather или TaskGroup. Если запустить ровно фрагмент без импорта asyncio и без ранее определённого имени, вместо этого возникнет NameError.

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

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

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

Подробнее