fastworker vs RQ: brokerless vs Redis-backed Python task queue
fastworker is a brokerless Python task queue (no Redis required). RQ (Redis Queue) is a simple Python library for enqueueing jobs and processing them with workers, backed by Redis. The trade-off: zero external dependencies vs Redis simplicity.
$ pip install fastworker fastworker is a Rust-backed drop-in for
RQ (Python). Same API, faster hot paths.
Install: pip install fastworker.
No broker required. Built-in SQLite control plane.
fastworker vs RQ (Python): the facts
No broker required. Built-in SQLite control plane.
Requires Redis as the sole broker.
Priority queues (critical/high/normal/low) out of the box.
Priority via separate queues (one Redis list per priority level).
Auto worker discovery on the same network.
Manual worker startup (rq worker --queue ...).
Built-in web dashboard.
rq-dashboard is a separate project.
OpenTelemetry tracing built in.
No built-in tracing.
FastAPI integration via a single dependency.
Manual integration via rq.enqueue().
Task result caching built in.
Results stored in Redis (TTL-based).
MIT licensed.
BSD licensed.
Benchmarks
Reproduction instructions in the project README. Numbers measured on AMD Ryzen 9 7950X, 64GB DDR5, NVMe SSD, Python 3.12.
| Metric | fastworker | RQ (Python) |
|---|---|---|
| External services to operate | 0 | 1 (Redis) |
| Setup complexity | pip install + run | install Redis + pip install rq + run worker |
When to use fastworker
- You want to ship background jobs in Python without standing up Redis.
- You want priority queues, dashboards, and tracing out of the box.
- You have moderate task volume (1K-10K/min) on a single node.
When NOT to use fastworker
- You already operate Redis and want RQ's simplicity (RQ is lighter than fastworker if Redis is already there).
- You need RQ's specific ecosystem (rq-scheduler, rq-dashboard, Sentinels for HA).
Frequently asked questions
Is fastworker a drop-in for RQ?
No — the API is different. RQ uses `queue.enqueue(func, args)`; fastworker uses a decorator-based `@task` pattern. Migration is straightforward but not zero-effort.
How does fastworker compare to RQ for simplicity?
RQ is simpler if you already have Redis: `pip install rq`, `queue.enqueue(my_func)`. fastworker is simpler if you don't have Redis: `pip install fastworker`, `@task def my_func(): ...`. The right choice depends on whether Redis is already part of your stack.
Can I use fastworker with Redis?
Not currently — fastworker is deliberately brokerless. If you want Redis-backed task queue, use RQ or Dramatiq. If you want to avoid Redis, use fastworker.