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