You should yield back to the event loop when you create a task by using await asyncio.sleep(0) after you create each task, otherwise all tasks will be executed sequentially.