Run things concurrently#
Trigger execution of many coroutines/tasks simultaneously
results = await asyncio.gather(
friendly_wait_for(.5),
friendly_wait_for(1),
friendly_wait_for(1.5),
)
print(results)
Done waiting for 0.5 seconds.
Done waiting for 1 seconds.
Done waiting for 1.5 seconds.
[0.5, 1, 1.5]
Work with results as they come in …
for coro in asyncio.as_completed(
[
friendly_wait_for(2.5),
friendly_wait_for(1),
friendly_wait_for(0.5),
]
):
result = await coro
print(result)
Done waiting for 0.5 seconds.
0.5
Done waiting for 1 seconds.
1
Done waiting for 2.5 seconds.
2.5
Use tasks instead of coroutines.
Note that as_completed always returns the wrapped coroutine.
for coro in asyncio.as_completed(
[
asyncio.create_task(friendly_wait_for(2.5)),
asyncio.create_task(friendly_wait_for(1)),
asyncio.create_task(friendly_wait_for(0.5)),
]
):
result = await coro
print(result)
Done waiting for 0.5 seconds.
0.5
Done waiting for 1 seconds.
1
Done waiting for 2.5 seconds.
2.5