Skip to main content

License PyPI - Version

async_obj

A minimalist and lightweight Python wrapper to make any function -standalone or within an object- asynchronous.

If you are also tired of adding a whole bunch of code for every single case of simple threading, this small wrapper is my remedy. Requires >=Python 3.8.

async obj enables:

  • Simply running a function in a dedicated thread.
  • Check for completion of the function.
  • Block until the function finishes.
  • Receiving the returned result.
  • In case of an exception, raising the exception on demand (whenever the result is requested).

Advantages:

  • No compatibility concerns (e.g., asyncio), only depends on a few standard Python libraries.
  • Essentially a 2 liner, no decorators or keywords.
  • Mimics an object or a function and does not create a copy, hence minimum impact on memory and performance.

Installation

Easiest way is to use pip, only requirement is Python >=3.8.

pip install async_obj

Examples

  • Run a function asynchronous and check for completion. Then collect the result.
from async_obj import async_obj
from time import sleep

def dummy_func(x:int):
    sleep(3)
    return x * x

#define the async version of the dummy function
async_dummy = async_obj(dummy_func)

print("Starting async function...")
async_dummy(2)  # Run dummy_func asynchronously
print("Started.")

while True:
    print("Checking whether the async function is done...")
    if async_dummy.async_obj_is_done():
        print("Async function is done!")
        print("Result: ", async_dummy.async_obj_get_result(), " Expected Result: 4")
        break
    else:
        print("Async function is still running...")
        sleep(1)

  • Alternatively, block until the function is completed, also retrieve any results.
print("Starting async function...")
async_dummy(4)  # Run dummy_func asynchronously
print("Started.")
print("Blocking until the function finishes...")
result = async_dummy.async_obj_wait()
print("Function finished.")
print("Result: ", result, " Expected Result: 16")

  • Raise propagated exceptions, whenever the result is requested either with async_obj_get_result() or with async_obj_wait().
print("Starting async function with an exception being expected...")
async_dummy(None) # pass an invalid argument to raise an exception
print("Started.")
print("Blocking until the function finishes...")
try:
    result = async_dummy.async_obj_wait()
except Exception as e:
    print("Function finished with an exception: ", str(e))
else:
    print("Function finished without an exception, which is unexpected.")

  • Same functionalities are available for functions within class instances.
class dummy_class:
    x = None

    def __init__(self):
        self.x = 5

    def dummy_func(self, y:int):
        sleep(3)
        return self.x * y

dummy_instance = dummy_class()
#define the async version of the dummy function within the dummy class instance
async_dummy = async_obj(dummy_instance)

print("Starting async function...")
async_dummy.dummy_func(4)  # Run dummy_func asynchronously
print("Started.")
print("Blocking until the function finishes...")
result = async_dummy.async_obj_wait()
print("Function finished.")
print("Result: ", result, " Expected Result: 20")

To Do

  1. Providing same concurrency functionalities for getter, setter and similar extension.
  2. Improve autocompletion support for better IDE convenience.

Metadata

Release files for async-obj 1.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for async-obj 1.0.2
File Size Uploaded
async_obj-1.0.2.tar.gz 9.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for async-obj 1.0.2
File Interpreter ABI Platform
async_obj-1.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 18.5 kB

Release files / async_obj-1.0.2.tar.gz

Download URL async_obj-1.0.2.tar.gz
Size 9.1 kB
Tags Source
SHA-256 checksum
How to use checksums
4c04e89c910a32d7f6ba6eb071205d437a05261bdd672f81f72509615be1cbf6
BLAKE2b-256 checksum
How to use checksums
ac9ce21941834231422dac51e8dc703213e21b44519fad0128b07675c1b2f19b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.13

Release files / async_obj-1.0.2-py3-none-any.whl

Download URL async_obj-1.0.2-py3-none-any.whl
Size 9.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e32941027ff939e8c0d11106f745251da5dd9b207033cba39d098c538142cc56
BLAKE2b-256 checksum
How to use checksums
5b328dc6b2b121dcfda371215cf5244034301fed036c4504e92371ec92eb6ed4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.13

Release history Release notifications | RSS feed

This release

1.0.2 This release

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page