drpancake / chard

A simple async/await task queue for Django. One process, no threads, no other dependencies.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Chard

Chard is a simple async/await background task queue for Django. One process, no threads, no other dependencies.

It uses Django's ORM to keep track of tasks.

๐Ÿ“– Documentation

๐Ÿ”— Check the example Django project

Requirements

  • Python 3.8+
  • Django 4.1+

Installation

pip install django-chard

Quickstart

First add chard anywhere in your INSTALLED_APPS setting and then run the migrations:

python manage.py migrate

Create a file called tasks.py in one of your apps and define a task:

import chard
import httpx
from asgiref.sync import sync_to_async

from .models import MyModel

@chard.task
async def my_task(country_code):
    url = f"https://somewhere.com/some-api.json?country_code={country_code}"
    async with httpx.AsyncClient() as client:
        resp = await client.get(url)
        obj = resp.json()
    for item in obj["items"]:
        await sync_to_async(MyModel.objects.create)(
          country_code=country_code,
          item=item
        )

To fire a task for the worker:

# Note that all arguments must be JSON serializable.
my_task.send("gb")

Run the worker process and it will watch for new pending tasks:

python manage.py chardworker

To see a full example of Chard in action:

๐Ÿ”— Check the example Django project

Contributing

Please see CONTRIBUTING the contributing guidelines.

License

Please see LICENSE for licensing details.

Changelog

0.2 (2022-09-16)

- Type hinting
- Return a task ID when queueing a task
- Added docs
- Tidying and bug fixes

About

A simple async/await task queue for Django. One process, no threads, no other dependencies.

License:Other


Languages

Language:Python 100.0%