Skip to main content

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:

  1. Will wrap a stand-alone function
  2. All arguments (keyword and positional) are passed
  3. Instance methods on classes may be wrapped
  4. 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

make_it_sync-2.0.0.tar.gz (5.5 kB view details)

Uploaded Source

Built Distribution

make_it_sync-2.0.0-py3-none-any.whl (4.3 kB view details)

Uploaded Python 3

File details

Details for the file make_it_sync-2.0.0.tar.gz.

File metadata

  • Download URL: make_it_sync-2.0.0.tar.gz
  • Upload date:
  • Size: 5.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.6

File hashes

Hashes for make_it_sync-2.0.0.tar.gz
Algorithm Hash digest
SHA256 2b19630e6e6ad7d87aa32a6120113cb61b88872afc88838b98d1d0dc3eebf8b5
MD5 fd325c5501b9b531925f8b6c57a05991
BLAKE2b-256 121d4dcf790222ee625f2e46b2d0d621b989010cb840bf6fa25a8bb8e48aa5ad

See more details on using hashes here.

File details

Details for the file make_it_sync-2.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for make_it_sync-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 52a7956cafd6613a2e5db6606e82e4f351a9253f44a31bc152cb36bcb80779c0
MD5 c2cdb0a0719efe9d9d59afdf1fd0da71
BLAKE2b-256 0c21d65181f962743a917480817da57848df2b9762df557ffa9c78308421134d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page