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()