Как формируется порядок вывода при работе с asyncio

Порядок 1, 3, 2 возможен только после исправления return data или определения data. В показанном фрагменте data не определена: после первого ожидания печатается 1 и возникает NameError.

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

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

Порядок 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 сохраняют зависимость выполнения.

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

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

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

Подробнее