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

После очень долгого ожидания будут напечатаны 1 и 3, затем возникнет TypeError: asyncio.sleep не принимает extra. Значение data — None; 2 не выводится.

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

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

После очень долгого ожидания будут напечатаны 1 и 3, затем возникнет TypeError: asyncio.sleep не принимает extra. Значение data — None; 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())

3

2

1

Ответ

После очень долгого ожидания будут напечатаны 1 и 3, затем возникнет TypeError: asyncio.sleep не принимает extra. Значение data — None; 2 не выводится.

Предполагается, что asyncio импортирован. main последовательно ждёт test_1: sleep(10000000) задерживает продолжение примерно на 116 суток, а не запускает параллельную задачу. После ожидания sleep возвращает None, затем печатается 1 и возвращается data=None.

Далее main печатает 3 и вызывает test_2(None). Передача extra=data в asyncio.sleep некорректна, поэтому до print('2') выполнение не доходит. Для возвращаемого значения существует параметр result, но простой await asyncio.sleep(1) здесь достаточен. После такого исправления порядок будет 1, 3, 2, а не указанный в условии.

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

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

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

Подробнее