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 theevents
will 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.Thread
if you have urls to wait;ker.MODE.PROCESS
- (default) distribute events withmultiprocessing.Process
if 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
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 |