等待多个异步功能并不是真正地异步工作,例如,我期望下面的代码在〜6秒内运行,但它像同步代码一样运行,并在〜10秒内执行。 但是,当我在asyncio.gather中尝试使用它时,它的执行时间约为6秒。
有人可以解释为什么会这样吗?
#Not working concurrently
async def async_sleep(n):
await asyncio.sleep(n+2)
await asyncio.sleep(n)
start_time = time.time()
asyncio.run(async_sleep(4))
end_time = time.time()
print(end_time-start_time)
#Working concurrently
async def async_sleep(n):
await asyncio.gather(asyncio.sleep(n+2),
asyncio.sleep(n))
答案 0 :(得分:2)
有人可以解释为什么[
gather
比连续等待更快吗?
这是设计使然:await x
是“在 x 完成之前,请勿继续使用此协程。”如果将两个等待一个接一个等待,则它们自然会顺序执行。如果要并行执行,则需要create tasks并等待它们完成,或者使用asyncio.gather
会为您完成。