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.
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)
| File | Size | Uploaded | |
|---|---|---|---|
| async_obj-1.0.2.tar.gz | 9.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|