https://blog.stackademic.com/unlocking-the-power-of-coroutines-in-python-build-your-own-mini-asyncio-task-scheduler-2b2129dbc1b9