Stop running Redis to send an email. Queue work in your existing database, where a dead worker doesn't mean lost tasks.
django-ox runs Django's Tasks framework with a database queue and a worker process. No Redis or RabbitMQ.
pip install django-ox
Enqueue inside transaction.atomic() on the same database as your models. Your data and its task commit together, or neither does.
When a worker dies, unfinished tasks return to the queue. Failed tasks retry with backoff, and you can inspect every attempt in Django admin. Execution is at-least-once: make tasks safe to repeat.
In the published kill test, django-ox finished 2,000 of 2,000 tasks after 20 worker kills per trial.
Get started with the guide · Read the benchmarks
Open source under the BSD 3-Clause licence. Supports Python 3.12+ and Django 5.2 LTS, 6.0 and 6.1.
django-ox 1.9.0 includes the optional oxpull app for unique tasks, batches, rate limiting and workflows. All four features are free and open source under the BSD 3-Clause licence.
The app requires Django 6.0+. The workflow API is provisional.
