我有一个假设的asyncio.gather
场景:
await asyncio.gather(
cor1,
[cor2, cor3],
cor4,
)
我希望在此依次执行cor2
和cor3
。除了像这样定义外部协程之外,是否还有其他捷径可做:
async def cor2_cor3():
await cor2
await cor3
await asyncio.gather(
cor1,
cor2_cor3,
cor4,
)
是否有更干净的快捷方式?
是否有更干净的快捷方式?
asyncio不提供开箱即用的功能。如果异步任务具有与JavaScript的Promise.then
等效的方法,则可以编写Promise.then
。但是异步等效项asyncio.create_task(cor2()).then(cor3())
是一个更底层的结构,它仅设置回调而不返回任何内容,这给链接带来了不便。
为了执行协程,您将需要编写一个简单的实用程序函数,例如:
add_done_callback
然后您可以将
add_done_callback
调用为:
def chain(*aws):
ret = None
for aw in aws:
ret = await aw
return ret