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.
Coordinate work with batches, unique tasks, rate limiting and workflows, backed by maintainer email support and priority feature requests.
$399 per year, per company, excluding VAT where it applies. Requires Django 6.0+.
