Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/drpancake/chard

A simple async/await task queue for Django. One process, no threads, no other dependencies.
https://github.com/drpancake/chard

Last synced: 17 days ago
JSON representation

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

Awesome Lists containing this project

README

        

# 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**](https://chard.readthedocs.io/en/latest/)

🔗 [Check the example Django project](https://github.com/drpancake/chard-django-example)

## Requirements

- Python 3.8+
- Django 4.1+

## Installation

```sh
pip install django-chard
```

## Quickstart

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

```sh
python manage.py migrate
```

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

```python
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:

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

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

```sh
python manage.py chardworker
```

To see a full example of Chard in action:

🔗 [Check the example Django project](https://github.com/drpancake/chard-django-example)

## Contributing

Please see [CONTRIBUTING](CONTRIBUTING.md) the contributing guidelines.

## License

Please see [LICENSE](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
```