在asyncio.gather中内联链异步IO协同路由

2024-09-30 01:37:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个假设的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,
)

有没有更干净的捷径


Tags: asyncioasync定义顺序def场景await快捷方式
1条回答
网友
1楼 · 发布于 2024-09-30 01:37:36

Is there a cleaner shortcut for this?

asyncio不提供现成的解决方案。如果asyncio任务有一个与JavaScript的^{}等效的方法,那么就可以使用asyncio.create_task(cor2()).then(cor3())。但是asyncio等价物^{}是一个更低级的构造,它只设置回调而不创建新的未来,这使得链接不方便

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

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

然后您可以调用gather作为:

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

相关问题 更多 >

    热门问题