Every Python task queue that matters.
Each engine adapter is a separate Apache-2.0 pip package. Install only the ones you need. Mix them freely within a project.
Celery
The industry standard, covered end-to-end.
RQ
Lightweight Redis queue, fully instrumented.
Dramatiq
Middleware-driven Dramatiq observability.
Huey
Lightweight Redis/SQLite queue, first-class.
arq
Async Redis queue for FastAPI-era Python.
taskiq
Broker-agnostic async task framework.
Action surface at a glance
What each engine supports natively or through a safe brain-side implementation. Grey cells mark actions the current adapter does not support.
| Action | Celery | RQ | Dramatiq | Huey | arq | taskiq |
|---|---|---|---|---|---|---|
| submit_task | native | native | native | native | native | native |
| retry_task | native | native | native | native | - | - |
| cancel_task | native | native | conditional | native | native | - |
| bulk_retry | native | native | - | - | - | - |
| purge_queue | native | native | native | - | - | - |
| requeue_dead_letter | - | native | - | - | - | - |
| restart_worker | native | - | - | - | - | - |
| rate_limit | native | - | - | - | - | - |
native = engine implements it directly.
polyfill = brain implements the action through a safe adapter contract without replaying stored redacted payloads.
conditional = available only with an extra installed.
Dramatiq advertises cancel only with the abort extra and a real dramatiq-abort Abortable middleware. Dramatiq and Huey cancellation is pending-only; neither interrupts running work.
Don't see your engine?
z4j's Protocol is stable and public. Existing adapters run from roughly 800 to 3,000 lines, depending on how much of the engine's control surface they can safely expose. Open a Discussion on GitHub if you want to coordinate, or jump straight to a pull request.