A simple wrapper to run any function asynchronously in a dedicated thread. Supports standalone functions and functions inside classes as well as result collection and exception propagation.
Project description
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 withasync_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
- Providing same concurrency functionalities for
getter,setterand similar extension. - Improve autocompletion support for better IDE convenience.
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file async_obj-1.0.0.tar.gz.
File metadata
- Download URL: async_obj-1.0.0.tar.gz
- Upload date:
- Size: 7.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eb34723233046d3784f7c22d780fa65811a53f690d463dceab6b65691ec5c3da
|
|
| MD5 |
564467a9192d572662bf854ae20720ab
|
|
| BLAKE2b-256 |
ce5a02035dbac9ec28785c7aeef54ec56fc507ed81cab0bf0bb364d82321f24f
|
File details
Details for the file async_obj-1.0.0-py3-none-any.whl.
File metadata
- Download URL: async_obj-1.0.0-py3-none-any.whl
- Upload date:
- Size: 6.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
25662658bcee1486c8c59dd369e982834b3857fac37edaf734006d8ac9b8b6b5
|
|
| MD5 |
c7b3bbb70efd731eb28526c38b4cfa0b
|
|
| BLAKE2b-256 |
e34ff6136f524fb90178c4e11e803b9743e6208bceb9204f07da1f0276001175
|