Celery vs other Python job queues in 2025
Celery, RQ, Dramatiq, ARQ: how we pick a Python job queue for SMB backends, and why Celery is still our default.
The choice matters less than you think
For most SMB workloads, all four queues — Celery, RQ, Dramatiq, ARQ — will work fine. The choice matters more for operational comfort than throughput.
Here is how we pick.
Celery: still our default
We pick Celery when the workload includes:
- Scheduled tasks (Celery beat is mature)
- Complex retries with exponential backoff and custom error handlers
- Workflow composition — chains, groups, chords
- Multiple result backends depending on the task
The downside is operational weight. Celery has the steepest learning curve of the four, and the docs assume you already know it. Setting up monitoring (Flower, custom dashboards) is real work.
RQ: when Celery is too much
If you only need "run this function in the background, retry it twice on failure," RQ does it in one tenth the code. We use RQ for client projects with simple background jobs and a small team that will inherit the code.
RQ falls down on scheduling and complex retries. If you need either, jump straight to Celery.
Dramatiq: the modern middle
Dramatiq is what we would design if we built a queue today. Clean API, sensible defaults, good middleware story. We use it on greenfield projects where the team is new to background jobs and we are not migrating from Celery.
The ecosystem is smaller. If you need a niche integration (a specific monitoring tool, an exotic broker), Celery still wins.
ARQ: only for fully-async stacks
ARQ is async-first and tiny. We use it when the entire backend is async (FastAPI + httpx + asyncpg) and we want to keep the runtime consistent.
For mixed sync/async code, the integration is painful. We default away from ARQ unless the rest of the stack is already async.
Our actual recommendation
- Small team, simple jobs → RQ
- Greenfield, modern team → Dramatiq
- Fully async stack → ARQ
- Anything else, or any scheduled jobs → Celery
We pick Celery on roughly 70% of client projects. Not because it is the prettiest. Because it is the queue that has handled every weird requirement we have thrown at it for a decade.