// the find
Bogdanp/dramatiq
A fast and reliable background task processing library for Python 3.
Dramatiq is a background task queue for Python 3 that sits between Celery (too complex) and RQ (too simple). It uses RabbitMQ or Redis as the broker and processes tasks with a thread-based worker pool. The target is Python shops that want reliable async job processing without Celery's configuration surface area.
The middleware system is genuinely well-designed — rate limiters, retries, time limits, and callbacks are all first-class middleware, not bolted-on config flags. Composition primitives (pipelines, groups) let you chain and fan-out tasks without reaching for a separate orchestration layer. The Redis broker uses Lua scripts for atomic queue operations, which avoids the race conditions that bite naive Redis task queues. Test coverage is thorough and the stub broker makes unit testing actors straightforward without spinning up infrastructure.
No built-in scheduler — you need APScheduler or a cron job to enqueue periodic tasks, which is a gap every real project hits immediately. Result storage is optional and awkward; if you need return values from tasks you're bolting on Redis results backend and dealing with TTL management yourself. Async support exists but is grafted on (the asyncio middleware runs async actors in a separate event loop per thread), so it's not a clean async-native story. The project is maintained by one person with a slow-ish release cadence; the LGPL license will also stop some teams from adopting it without a legal conversation.