import asyncio def do_stuff_a_1(): print('a-1') def do_stuff_a_2(): print('a-2') def do_stuff_b_1(): print('b-1') def do_stuff_b_2(): print('b-2') def do_stuff_c_1(): print('c-1') def do_stuff_c_2(): print('c-2') async def a_wait(): await asyncio.sleep(1) async def b_wait(): await asyncio.sleep(1) async def c_wait(): await asyncio.sleep(1) async def task_a(): do_stuff_a_1() await a_wait() do_stuff_a_2() async def task_b(): do_stuff_b_1() await b_wait() do_stuff_b_2() async def task_c(): do_stuff_c_1() await c_wait() do_stuff_c_2() def run_tasks(): loop = asyncio.get_event_loop() tasks = [] tasks.append(loop.create_task(task_a())) tasks.append(loop.create_task(task_b())) tasks.append(loop.create_task(task_c())) future = asyncio.gather(*tasks, return_exceptions=True) loop.run_until_complete(future) if __name__ == "__main__": run_tasks()