При импортированном asyncio порядок будет 1, 3, 2. Последовательные await не запускают test_1 и test_2 одновременно.
Порядок печати при последовательных await в asyncio
При импортированном asyncio порядок будет 1, 3, 2. Последовательные await не запускают test_1 и test_2 одновременно.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, в каком порядке будут выведены числа при запуске следующего скрипта.
# asyncio / multiprocessing / threading
async def test_1():
await asyncio.sleep(1000000)
print('1')
async def test_2():
await asyncio.sleep(1)
print('2')
async def main():
await test_1()
print('3')
await test_2()
asyncio.run(main())
Ответ
При импортированном asyncio порядок будет 1, 3, 2. Последовательные await не запускают test_1 и test_2 одновременно.
Сначала main ждёт завершения test_1. Задержка 1000000 измеряется в секундах — примерно 11,6 суток. После неё выводится 1, затем управление возвращается в main, где печатается 3. Далее начинается test_2, которая ждёт секунду и печатает 2.
1
3
2
В показанном фрагменте отсутствует import asyncio; без него буквальный запуск завершится NameError раньше выполнения корутин. await отдаёт управление циклу событий, но продолжение текущей функции всё равно ждёт результата. Для конкурентного запуска нужны задачи или gather.