asyncio loop.run_until_complete 不会和 asyncio.sleep 一起睡觉



这是代码:

In [168]: async def myTask():
...:     await asyncio.sleep(2)
...:     print("processing task")
In [168]: async def generator():
...:     for i in range(5):
...:         asyncio.create_task(myTask())
In [168]: def abcd():
...:     t0=time.time()
...:     loop=asyncio.get_event_loop()
...:     loop.run_until_complete(generator())
...:     t1=time.time()
...:     print(t1-t0)

理想情况下,调用 abc(( 应该休眠大约 10 秒(因为我还没有等待asyncio.create_task(myTask())(,但该函数在不到 0.1 秒的时间内完成。

In [167]: abcd()
processing task
processing task
processing task
processing task
processing task
0.0004038810729980469

如果您尝试以下代码,您将在大约 2 秒后获得输出。好吧,但我们还没有等待任何任务。原因是 Jupyter 笔记本本身在事件循环中运行。因此,当您使用默认事件循环时,它实际上指向 Jupyter 笔记本的事件循环。

import asyncio
async def myTask():
await asyncio.sleep(2)
print("processing task")
for i in range(5):
asyncio.create_task(myTask())

最新更新