Stupid simple background worker based on python.
Project description
kerground
Stupid simple background worker based on python. Kerground is super basic - no need for Redis/RabbitMQ. It does not utilize to much RAM because events are saved in plain old json files.
Quickstart
Install
pip install kerground
In your app folder create a new package called dependencies (you can add this in utils or whatever you consider fit otherwise)
#app/dependencies/kerground.py
from kerground import Kerground
ker = Kerground()
You can set on Kerground the following params:
tasks_path- path where theeventswill be saved by default in "./.kergroundtasks";pool- wait in seconds for pending tasks;
Next register your background workers like:
#some_module_.py
from app.dependencies import ker
@ker.register(ker.MODE.THREAD, max_retries=3)
def convert_files(event: list[str]):
pass # some heavy duty stuff here
# or just go with the defaults
@ker.register
def convert_files_v2(event: list[str]):
pass # some heavy duty stuff here
The event must be json serializable!
There are 3 mode available:
ker.MODE.THREAD- distribute events withthreading.Threadif you have urls to wait;ker.MODE.PROCESS- (default) distribute events withmultiprocessing.Processif you have some CPU intensive tasks;ker.MODE.SYNC- distribute events one by one for the func to process;
By default max_retries is 0 you can increase this number if you need to get data from some urls and there is a posibility they will fail.
Now you can send an event to background worker (kerground) like:
#some_other_module_possible_route_handler.py
from app.dependencies import ker
def send_files_for_conversion(files: List[UploadFile]):
filepaths = [file.filename for file in files]
msgid = ker.enqueue("convert_files", filepaths)
return f"Files were sent for conversion with id: {msgid}"
Pass to ker.enqueue the function name you want to call in background along with the json parsable *args and **kwargs. Function ker.enqueue will return an id which you can later inspect for it's status with ker.check_status(msgid).
Prepare the worker.py file:
# ./worker.py
from app.dependencies import ker
if __name__ == "__main__":
ker.listen()
You can check the example folder which was used for tests.
Dashboard
Kerground offers a small dashboard in which you can see the functions registered and their status count in a table.
To see the dashboard create a new file worker_dashboard.py and add the following code:
#./worker_dashboard.py
from app.dependencies import ker
if __name__ == "__main__":
ker.dashboard()
Go to http://localhost:3030/ to see the dashboard.
The data used to fill the tasks table from the dashboard is taken by calling function: ker.get_current_tasks().
You are free to create a custom endpoint in your choosed web framework and call that func.
More features will be added soon.
Submit any questions/issues you have! Fell free to fork it and improve it!
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 kerground-0.1.1.tar.gz.
File metadata
- Download URL: kerground-0.1.1.tar.gz
- Upload date:
- Size: 6.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.22.0 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.0 importlib-metadata/4.11.3 keyring/18.0.1 rfc3986/2.0.0 colorama/0.4.3 CPython/3.8.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8881bce7eaff32801c6d32d1e629bc747b18c3091bbe597622dc53da2481f763
|
|
| MD5 |
483b37916c41ccc65d47192fea78ce1c
|
|
| BLAKE2b-256 |
e15751159b6b4e3d99ba9b5c33ba5558447aa017ae041098afbac3c15dc93e20
|
File details
Details for the file kerground-0.1.1-py3-none-any.whl.
File metadata
- Download URL: kerground-0.1.1-py3-none-any.whl
- Upload date:
- Size: 6.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.22.0 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.0 importlib-metadata/4.11.3 keyring/18.0.1 rfc3986/2.0.0 colorama/0.4.3 CPython/3.8.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3808e3402126abb3eb8113dc486498c538df4f3a04178be6419dcec07761fc02
|
|
| MD5 |
19b39bee5b9c374dbbc3238c57e44928
|
|
| BLAKE2b-256 |
29a0c66815f2a9fe20ca7cc80f9ff60d5f29a4c2b123ed38219527a5f5d5d845
|