syncio: asyncio, without await
asyncio can look very intimidating to newcomers, because of the
await syntax. Even
experienced programmers can get caught in the “async hell”, when awaiting a single async function
propagates to the entire code base. Sometimes you wish you could call an async function just
like a regular function, whether running in an event loop or not.
syncio is an attempt to make both worlds, asynchronous and synchronous, play better together.
By decorating a function, be it async or not, with
@sync, you don’t have to remember if you need
to await it, you just always call it directly. This means there is not real difference anymore, any
async function is also a regular function.
import asyncio import time import syncio from syncio import sync # an async function decorated with @sync # can be called directly, without "await" @sync async def async_function(): await asyncio.sleep(1) # or use syncio's sleep function: # syncio.sleep(1) print("async_function done") # this looks like a regular function (no async/await) # although async_function is async @sync def pure_syncio(): async_function() print("pure_syncio done") # decorating a regular function with @sync has no effect # this reduces mental overhead: you can always use @sync @sync def not_async(): time.sleep(1) print("not_async done") async_function() pure_syncio() not_async()