Порядок 1, 3, 2 возможен только после исправления return data или определения data. В показанном фрагменте data не определена: после первого ожидания печатается 1 и возникает NameError.
Как формируется порядок вывода при работе с asyncio
Порядок 1, 3, 2 возможен только после исправления return data или определения data. В показанном фрагменте data не определена: после первого ожидания печатается 1 и возникает NameError.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Разберите, почему при запуске следующего фрагмента кода вывод будет именно 1, 3, 2.
# asyncio / multiprocessing / threading
async def test_1():
await asyncio.sleep(10000000)
print('1')
return data
async def test_2():
await asyncio.sleep(1)
print('2')
async def main():
await test_1()
print('3')
await test_2()
asyncio.run(main())
Ответ
Порядок 1, 3, 2 возможен только после исправления return data или определения data. В показанном фрагменте data не определена: после первого ожидания печатается 1 и возникает NameError.
Предполагаем, что asyncio импортирован. Вызов await test_1() приостанавливает main до окончания test_1, включая её sleep на 10 000 000 секунд. После print('1') интерпретатор пытается прочитать data, которой в примере нет.
Удалите return data или замените на return None. Тогда test_1 завершится, main напечатает 3 и только затем начнётся test_2 с ожиданием одной секунды и выводом 2. async не означает автоматический параллельный запуск: последовательные await сохраняют зависимость выполнения.