Есть ли более чистый ярлык для этого?
asyncio не предоставляет один из коробки. Если бы у асинхронных задач был метод, эквивалентный JavaScript Promise.then
, вы могли бы использовать asyncio.create_task(cor2()).then(cor3())
. Но эквивалент asyncio, add_done_callback
, является более низкоуровневой конструкцией, которая просто устанавливает обратный вызов без создания нового будущего, что делает его неудобным для создания цепочек.
Выполнение сопрограмм для того, чтобы вам нужно было написать простую служебную функцию, например (непроверенную):
async def chain(*aws):
ret = None
for aw in aws:
ret = await aw
return ret
Затем вы можете вызвать gather
как:
await asyncio.gather(cor1(), chain(cor2(), cor3()), cor4())