gpt4 book ai didi

python-3.x - 为什么大多数 asyncio 示例都使用 loop.run_until_complete()?

转载 作者:行者123 更新时间:2023-12-03 10:59:21 28 4
gpt4 key购买 nike

我正在浏览 asyncio 的 Python 文档我想知道为什么大多数示例都使用 loop.run_until_complete()而不是 Asyncio.ensure_future() .

例如:https://docs.python.org/dev/library/asyncio-task.html

好像ensure_future将是展示非阻塞函数优势的更好方式。 run_until_complete另一方面,像同步函数一样阻塞循环。

这让我觉得我应该使用 run_until_complete而不是 ensure_future 的组合与 loop.run_forever()同时运行多个协程。

最佳答案

run_until_complete用于运行 future 直到它完成。它将阻止其后代码的执行。但是,它确实会导致事件循环运行。任何已安排的 future 都将运行,直到 future 传递到 run_until_complete已经完成了。

鉴于这个例子:

import asyncio

async def do_io():
print('io start')
await asyncio.sleep(5)
print('io end')

async def do_other_things():
print('doing other things')

loop = asyncio.get_event_loop()

loop.run_until_complete(do_io())
loop.run_until_complete(do_other_things())

loop.close()
do_io会跑。完成后, do_other_things会跑。您的输出将是:
io start
io end
doing other things

如果您安排时间 do_other_things在运行之前使用事件循环 do_io , 控制将从 do_io 切换至 do_other_things当前者等待。
loop.create_task(do_other_things())
loop.run_until_complete(do_io())

这将为您提供以下输出:
doing other things
io start
io end

这是因为 do_other_things之前预定 do_io .有很多不同的方法可以获得相同的输出,但哪种方法有意义实际上取决于您的应用程序实际执行的操作。所以我将把它留给读者作为练习。

关于python-3.x - 为什么大多数 asyncio 示例都使用 loop.run_until_complete()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40143289/

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