gpt4 book ai didi

python - 在 asyncio.gather 中内联链 asyncio 协程

转载 作者:行者123 更新时间:2023-12-01 01:38:52 34 4
gpt4 key购买 nike

我有一个假设 asyncio.gather设想:

await asyncio.gather(
cor1,
[cor2, cor3],
cor4,
)

我要 cor2cor3在这里按顺序执行。除了定义这样的外部协程之外,还有其他快捷方式吗:

async def cor2_cor3():
await cor2
await cor3

await asyncio.gather(
cor1,
cor2_cor3,
cor4,
)

有没有更干净的捷径?

最佳答案

Is there a cleaner shortcut for this?



asyncio 不提供开箱即用的功能。如果 asyncio 任务有一个等同于 JavaScript 的 Promise.then 的方法,你就可以使用 asyncio.create_task(cor2()).then(cor3()) .但是 asyncio 等效项, add_done_callback , 是一个更底层的构造,它只设置回调而不创建新的 future ,这使得链接不方便。

要按顺序执行协程,您需要编写一个简单的实用程序函数,例如(未经测试):

async def chain(*aws):
ret = None
for aw in aws:
ret = await aw
return ret

然后你可以调用 gather作为:

await asyncio.gather(cor1(), chain(cor2(), cor3()), cor4())

关于python - 在 asyncio.gather 中内联链 asyncio 协程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60350005/

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