The equivalent would be using asyncio.gather
:
import asyncio
async def bar(i):
print('started', i)
await asyncio.sleep(1)
print('finished', i)
async def main():
await asyncio.gather(*[bar(i) for i in range(10)])
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()
Why doesn’t my approach work?
Because when you await
each item in seq
, you block that coroutine. So in essence, you have synchronous code masquerading as async. If you really wanted to, you could implement your own version of asyncio.gather
using loop.create_task
or asyncio.ensure_future
.
EDIT
The original answer used the lower-level asyncio.wait
.