Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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.
- Host: GitHub
- URL: https://github.com/drpancake/chard
- Owner: drpancake
- License: other
- Created: 2022-09-08T07:59:53.000Z (about 2 years ago)
- Default Branch: master
- Last Pushed: 2024-03-02T13:46:57.000Z (8 months ago)
- Last Synced: 2024-10-07T18:07:35.022Z (about 1 month ago)
- Language: Python
- Size: 38.1 KB
- Stars: 201
- Watchers: 4
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
- stars - drpancake/chard - A simple async/await task queue for Django. One process, no threads, no other dependencies. (Python)
- stars - drpancake/chard - A simple async/await task queue for Django. One process, no threads, no other dependencies. (Python)
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_asyncfrom .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
```