Skip to main content

Stupid simple background worker based on python.

Project description

kerground

Downloads PyPI

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 the events 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 with threading.Thread if you have urls to wait;
  • ker.MODE.PROCESS - (default) distribute events with multiprocessing.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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kerground-0.1.1.tar.gz (6.2 kB view details)

Uploaded Source

Built Distribution

kerground-0.1.1-py3-none-any.whl (6.4 kB view details)

Uploaded Python 3

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

Hashes for kerground-0.1.1.tar.gz
Algorithm Hash digest
SHA256 8881bce7eaff32801c6d32d1e629bc747b18c3091bbe597622dc53da2481f763
MD5 483b37916c41ccc65d47192fea78ce1c
BLAKE2b-256 e15751159b6b4e3d99ba9b5c33ba5558447aa017ae041098afbac3c15dc93e20

See more details on using hashes here.

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

Hashes for kerground-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3808e3402126abb3eb8113dc486498c538df4f3a04178be6419dcec07761fc02
MD5 19b39bee5b9c374dbbc3238c57e44928
BLAKE2b-256 29a0c66815f2a9fe20ca7cc80f9ff60d5f29a4c2b123ed38219527a5f5d5d845

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page