gpt4 book ai didi

python - 多个异步调用阻塞

转载 作者:太空狗 更新时间:2023-10-30 00:59:15 24 4
gpt4 key购买 nike

我的代码:

import asyncio

async def test(i):
await asyncio.sleep(i)
print('test')

async def main():
await test(2)
await test(2)
await test(2)

asyncio.get_event_loop().run_forever(main())

我原以为它会休眠三秒钟,然后打印出 'test' 三次,但它会在每次 'test' 之前分别等待 2 秒(所以 last 'test' 在 6 秒时打印)。

我哪里理解错了,我该如何解决它才能按预期工作?

最佳答案

await 暂停当前函数的执行,直到 future 返回。在 test 中,这使得函数等待 2 秒直到 asyncio.sleep 返回,然后再打印。在 main 中,它使函数等待直到 test 返回(它在 print 之后执行,在 sleep 之后执行> 已返回),然后在下一行继续下一个 await test

如果你想同时执行所有的test,并让它们在两秒后一次打印,你可以使用asyncio.gather:

async def main():
await asyncio.gather(test(2), test(2), test(2))

这会在事件循环中同时安排三个 test 协程,并等待它们的所有组合结果,这些结果将在大约 2 秒内到达。

您也可以在不等待协程完成的情况下触发并忘记协程:

def main():
asyncio.ensure_future(test(2))
asyncio.ensure_future(test(2))
asyncio.ensure_future(test(2))

关于python - 多个异步调用阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43518504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com