Engines overview
z4j supports six engines, each with its own adapter package (z4j-<engine>).
| Engine | Package | Broker | Strengths | Default scheduler |
|---|---|---|---|---|
| Celery | z4j-celery | Redis / RabbitMQ / SQS | Massive ecosystem, chords/groups/chains | celery-beat |
| RQ | z4j-rq | Redis | Simple, small surface, Python-only | rq-scheduler |
| Dramatiq | z4j-dramatiq | Redis / RabbitMQ | Reliable, middleware-first | APScheduler |
| Huey | z4j-huey | Redis / Sqlite / in-memory | Minimal deps, great for Django | built-in periodic |
| arq | z4j-arq | Redis | Async-native, great for FastAPI | arq cron |
| taskiq | z4j-taskiq | Redis / RabbitMQ / NATS / in-memory | Modern async, pluggable brokers | taskiq-scheduler |
Installing
Section titled “Installing”Pick one or more. They can coexist in the same process:
pip install z4j-celery z4j-rq z4j-dramatiqCapability matrix
Section titled “Capability matrix”| Feature | Celery | RQ | Dramatiq | Huey | arq | taskiq |
|---|---|---|---|---|---|---|
| Retry (native) | ✓ | ✓ | ✓ | ✓ | polyfill | ✓ |
| Cancel (native) | partial | ✓ | - | partial | ✓ | ✓ |
| Bulk retry | polyfill | polyfill | polyfill | polyfill | polyfill | polyfill |
| Queue purge | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Chord / group aware | ✓ | - | - | - | - | - |
| Result store visibility | ✓ | ✓ | partial | ✓ | ✓ | ✓ |
| Native scheduler | celery-beat | rq-scheduler | - | built-in | cron jobs | taskiq-scheduler |
“polyfill” = brain implements via re-enqueue + cancel. Users see no difference in the UI.
Event capture strategy
Section titled “Event capture strategy”Each adapter uses the engine’s native signal / middleware / hook system:
| Engine | Capture mechanism |
|---|---|
| Celery | task_sent / task_prerun / task_postrun / task_retry / task_failure signals |
| RQ | Queue.enqueue_call monkey-patch + job lifecycle hooks |
| Dramatiq | custom Middleware that hooks before_process_message / after_process_message |
| Huey | signal handlers (SIGNAL_ENQUEUED / SIGNAL_EXECUTING / SIGNAL_EXECUTED) |
| arq | on_job_start / on_job_end hooks on the worker |
| taskiq | middleware: TaskiqMiddleware.pre_send / post_execute |
Patches are additive - they don’t replace your existing signal handlers.
Per-engine pages
Section titled “Per-engine pages”See the left sidebar - one page per engine with install, config, events, actions, and caveats.