How do I remove the async-everywhere insanity in a program like this?
import asyncio
async def async_coro():
    await asyncio.sleep(1)
async def sync_func_1():
    # This is blocking and synchronous
    await async_coro()
async def sync_func_2():
    # This is blocking and synchronous
    await sync_func_1()
if __name__ == "__main__":
    # Async pollution goes all the way to __main__
    asyncio.run(sync_func_2())
I need to have 3 async markers and asyncio.run at the top level just to call one async function. I assume I'm doing something wrong - how can I clean up this code to make it use async less?
FWIW, I'm interested mostly because I'm writing an API using asyncio and I don't want my users to have to think too much about whether their functions need to be def or async def depending on whether they're using a async part of the API or not.
 
    