Create a sync version of an async function
Project description
make-it-sync
This very simple library helps provide a synchronous interface for your python async
functions and class methods.
Introduction
from asyncio import sleep
from make_it_sync import make_sync
async def simple_func(a: int) -> int:
'Simple sleeper function to test calling mechanics'
await sleep(0.01)
return a + 1
t_wrap = make_sync(simple_func)
print (t_wrap(4))
# Prints out 5
It works by running an async
event loop and executing the function. It will use the current thread if no loop is running, otherwise it will create a new thread and run the function there.
Features:
- Will wrap a stand-alone function
- All arguments (keyword and positional) are passed
- Instance methods on classes may be wrapped
- Abstract methods are correctly handled.
Usage
To install pip install make-it-async
.
The make_sync
function creates a new function that will call the function you pass to it:
async def simple_func(a: int) -> int:
'Simple sleeper function to test calling mechanics'
await sleep(0.01)
return a + 1
t_wrap = make_sync(simple_func)
You may treat t_wrap
as a python function. You could use make_sync
as a function decorator, though that isn't the normal usage as that would hid the async
version of the function. Normally, make_sync
is used to provide a non-async, alternate, version of the function.
It is also possible to use make_sync
with abstract functions:
class abc_base(ABC):
@abstractmethod
async def doit_async(self):
raise NotImplementedError()
doit = make_sync(doit_async)
class abc_derived(abc_base):
async def doit_async(self):
return 42
a = abs_derived()
print(a.doit())
# Will print out 42
The abstract dispatch will occur at runtime and the call to doit_async
will be pulled from the the sub-class. This allows you to define the asynchronous API in an ABC
, and build a common set of synchronous methods.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for make_it_sync-1.0.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e06808ce449f765b0f86a2badc2bbe72a3f6a3d4793472b2b8c221bbdba66511 |
|
MD5 | 58a3987a2e818225ba6dbcac6c9d1ee6 |
|
BLAKE2b-256 | 87787fa133c36425d4815af4093951577852e6f7cdfe821a87eb092fd053cbff |