Skip to content

drpancake/chard

master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 

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. This is a new project under active development. PRs are welcome!

📖 Documentation

📨 Sign up to the newsletter to get news and updates

🔗 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.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages