Python asyncio: create_task и последовательный await

Вывод программы будет:

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

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

Вывод программы будет:

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

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

Условие

import asyncio

# 2 usages
async def func1():
    await asyncio.sleep(1)

# 2 usages
async def func2():
    await asyncio.sleep(2)

# 2 usages
async def func3():
    await asyncio.sleep(3)

# 1 usage
async def async_func1():
    task1 = asyncio.create_task(func1())
    task2 = asyncio.create_task(func2())
    task3 = asyncio.create_task(func3())

    await task1
    await task2
    await task3

async def async_func2():
    await func1()
    await func2()
    await func3()

if __name__ == "__main__":
    ...

The task is to analyze or compare the behavior of async_func1 and async_func2 in terms of asynchronous execution and awaiting tasks.

Ответ

Вывод программы будет:

1
2
1
3
2

Объяснение:

  1. В main() сначала вызывается await say_hello(). Это запускает say_hello(), который печатает 1, затем делает await asyncio.sleep(1) — приостанавливает корутину на 1 секунду, позволяя другим задачам выполняться.
  2. После паузы say_hello() продолжает и печатает 2. Этот вызов полностью завершается.
  3. Затем создаётся задача task = asyncio.create_task(say_hello()), которая запускает say_hello() асинхронно, но не ждёт её завершения.
  4. Сразу после создания задачи печатается 3.
  5. Затем await task ожидает завершения задачи, которая сначала печатает 1, затем ждёт 1 секунду, и после этого печатает 2.

Таким образом, первый вызов say_hello() выполняется последовательно, а второй — запускается параллельно с выводом 3, что и отражается в порядке вывода.

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

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

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

Подробнее