Gra*_*rus 6 python python-asyncio
我有一个假设的asyncio.gather场景:
await asyncio.gather(
cor1,
[cor2, cor3],
cor4,
)
Run Code Online (Sandbox Code Playgroud)
我愿意在这里cor2按cor3顺序被处决。除了像这样定义外部协程之外,还有其他快捷方式吗:
async def cor2_cor3():
await cor2
await cor3
await asyncio.gather(
cor1,
cor2_cor3,
cor4,
)
Run Code Online (Sandbox Code Playgroud)
有没有更干净的捷径?
有没有更干净的捷径?
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
Run Code Online (Sandbox Code Playgroud)
然后您可以调用gather为:
await asyncio.gather(cor1(), chain(cor2(), cor3()), cor4())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1517 次 |
| 最近记录: |