Python asyncio loop.run_,直到_完成不使用asyncio.sleep睡眠
代码如下:Python asyncio loop.run_,直到_完成不使用asyncio.sleep睡眠,python,python-3.x,python-asyncio,Python,Python 3.x,Python Asyncio,代码如下: 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():
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_任务(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())
如果您尝试以下代码,大约2秒后将获得输出。好吧,但我们没有等待任何任务。原因是Jupyter笔记本本身正在事件循环中运行。因此,当您使用默认事件循环时,它实际上指向Jupyter笔记本的事件循环
import asyncio
async def myTask():
await asyncio.sleep(2)
print("processing task")
for i in range(5):
asyncio.create_task(myTask())
您没有等待
myTask()
。如果您尝试直接用asyncio.sleep(2)
替换myTask()
,您将得到完全相同的行为。嗯…@MateenUlhaq是的,但在这种情况下,不应打印输出。很混乱。你事先保存文件了吗?请用您发布的示例再试一次。它似乎没有为我生成额外的输出。@MateenUlhaq我正在python jupyter记事本中运行它,您还没有等待myTask()
。如果您尝试直接用asyncio.sleep(2)
替换myTask()
,您将得到完全相同的行为。嗯…@MateenUlhaq是的,但在这种情况下,不应打印输出。很混乱。你事先保存文件了吗?请用您发布的示例再试一次。它似乎没有为我生成额外的输出。@MateenUlhaq我正在pythonjupyter笔记本中运行它