等待python中的多个异步函数

时间:2019-08-16 03:56:06

标签: python python-asyncio

等待多个异步功能并不是真正地异步工作,例如,我期望下面的代码在〜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))

1 个答案:

答案 0 :(得分:2)

  

有人可以解释为什么[gather比连续等待更快吗?

这是设计使然:await x “在 x 完成之前,请勿继续使用此协程。”如果将两个等待一个接一个等待,则它们自然会顺序执行。如果要并行执行,则需要create tasks并等待它们完成,或者使用asyncio.gather会为您完成。