gather
, как вы уже отметили, будет ждать, пока все сопрограммы не будут выполнены, поэтому вам нужно найти другой путь.
Например, вы можете использовать функцию asyncio.as_completed , которая кажетсяделай то, что хочешь.
import asyncio
async def echo(t):
await asyncio.sleep(t)
return t
async def main():
coros = [
echo(3),
echo(2),
echo(1),
]
for first_completed in asyncio.as_completed(coros):
res = await first_completed
print(f'Done {res}')
asyncio.run(main())
Результат:
Done 1
Done 2
Done 3
[Finished in 3 sec]