Порядок выполнения и передача аргументов в asyncio

После долгого ожидания test_1 вернёт None и напечатает 1, затем main напечатает 3. test_2 получит None, но вызов sleep с extra вызовет TypeError: сообщения 2 не будет.

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

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

После долгого ожидания test_1 вернёт None и напечатает 1, затем main напечатает 3. test_2 получит None, но вызов sleep с extra вызовет TypeError: сообщения 2 не будет.

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

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

Условие

Разобрать, в каком порядке выводятся сообщения и какие значения передаются между корутинами. Определите, какое значение будет получено в параметре data функции test_2() в приведённом примере. Проверьте, соответствует ли комментарий под кодом фактическому порядку вывода.

# asyncio / multiprocessing / threading

async def test_1():
    data = await asyncio.sleep(10000000)
    print('1')
    return data

async def test_2(data):
    await asyncio.sleep(1, extra=data)
    print('2')

async def main():
    data = await test_1()
    print('3')
    await test_2(data)

asyncio.run(main())

Ответ

После долгого ожидания test_1 вернёт None и напечатает 1, затем main напечатает 3. test_2 получит None, но вызов sleep с extra вызовет TypeError: сообщения 2 не будет.

Предполагается, что asyncio импортирован. Первый await ждёт 10 000 000 секунд; он не запускает следующие строки main параллельно. У asyncio.sleep без аргумента result результат равен None, поэтому именно None передаётся в test_2.

Аргумент extra не поддерживается. Исправление:

await asyncio.sleep(1, result=data)

После такой замены порядок будет 1, 3, 2. Без import asyncio исходный самостоятельный фрагмент завершится ещё раньше с NameError. Для конкурентного выполнения нужны отдельно созданные задачи, а не только последовательные await.

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

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

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

Подробнее