Вывод программы будет:
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
Объяснение:
- В
main()сначала вызываетсяawait say_hello(). Это запускаетsay_hello(), который печатает1, затем делаетawait asyncio.sleep(1)— приостанавливает корутину на 1 секунду, позволяя другим задачам выполняться. - После паузы
say_hello()продолжает и печатает2. Этот вызов полностью завершается. - Затем создаётся задача
task = asyncio.create_task(say_hello()), которая запускаетsay_hello()асинхронно, но не ждёт её завершения. - Сразу после создания задачи печатается
3. - Затем
await taskожидает завершения задачи, которая сначала печатает1, затем ждёт 1 секунду, и после этого печатает2.
Таким образом, первый вызов say_hello() выполняется последовательно, а второй — запускается параллельно с выводом 3, что и отражается в порядке вывода.