Ven*_*Ram 12 python python-asyncio
等待多个异步函数并不是真正的异步工作。
例如,我期望下面运行多个await函数的代码在大约 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)
Run Code Online (Sandbox Code Playgroud)
# Working concurrently
async def async_sleep(n):
await asyncio.gather(
asyncio.sleep(n+2),
asyncio.sleep(n)
)
Run Code Online (Sandbox Code Playgroud)
use*_*342 12
有人可以解释为什么[
gather比连续等待更快]吗?
这是设计使然:await x 意味着“在x完成之前不要继续执行此协程”。如果你一个接一个地放置两个等待,它们自然会按顺序执行。如果您想要并行执行,您需要创建任务并等待它们完成,或者使用asyncio.gatherwhich 来为您完成任务。
| 归档时间: |
|
| 查看次数: |
17672 次 |
| 最近记录: |