在python中等待多个异步函数
Posted
技术标签:
【中文标题】在python中等待多个异步函数【英文标题】:Await multiple async functions in python 【发布时间】:2019-08-16 03:56:06 【问题描述】:等待多个异步函数并不是真正异步工作,例如,我期望下面的代码在 ~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】:有人可以解释为什么 [
gather
比连续等待更快]?
这是设计使然:await x
意味着“在 x 完成之前不要继续这个协程。”如果你一个接一个地放置两个 await,它们自然会顺序执行。如果您想要并行执行,您需要 create tasks 并等待它们完成,或者使用 asyncio.gather
它将为您完成。
【讨论】:
您应该考虑在此处插入示例,而不是指向文档。例如我试过这个await asyncio.gather(task1, task2)
,它按顺序运行任务,相当并行。我不认为你的说法是正确的。
@Houman asyncio.gather
绝对是为了并行运行。如果您按顺序获取内容,则可能没有等待,即您正在运行同步代码。以上是关于在python中等待多个异步函数的主要内容,如果未能解决你的问题,请参考以下文章
在 python 中等待之前,不会在异步函数中调用 print 函数