If you do the following it works as expected
async def child():
print("child start")
await asyncio.sleep(0)
print("child end")
async def parent():
print("parent before")
task = child()
print("parent after")
await task
The real difference is that the coroutine is not going to do _anything_ until it is awaited, but I don't think the asyncio task is really different in a meaningful way. It's just a wrapper with an actual task manager so you can run things 'concurrently'.Python does have two different coroutines, but they're generators and async functions. You can go from one to the other,