fastworker vs Celery: a brokerless Python task queue (no Redis, no RabbitMQ)
fastworker is a Python 3.12+ task queue with a built-in control plane — no external broker required. Priority queues, distributed workers, FastAPI integration, OpenTelemetry.
$ pip install fastworker fastworker is a Rust-backed drop-in for
Celery. Same API, faster hot paths.
Install: pip install fastworker.
No broker required. Workers talk to a built-in control plane over loopback or mTLS.
fastworker vs Celery: the facts
No broker required. Workers talk to a built-in control plane over loopback or mTLS.
Requires Redis, RabbitMQ, SQS, or another broker.
1K-10K tasks/min on a single node, no extra services.
Throughput scales with the broker; default Redis is fast but you have to operate it.
Priority queues (critical/high/normal/low) out of the box.
Priority via routing keys; no built-in priority semantics.
Auto worker discovery on the same network.
Manual worker registration.
Task result caching built in.
Celery result backends (Redis, DB) require separate configuration.
FastAPI integration via a single dependency.
First-class FastAPI support is community-maintained.
OpenTelemetry tracing built in.
Requires celery-signals glue.
Built-in web dashboard.
Flower is a separate project.
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 | Celery |
|---|---|---|
| Tasks/min (single node, no broker) | 1K-10K | Broker-bound |
| External services to operate | 0 | 1 (broker) |
When to use fastworker
- You want to ship background jobs in Python without standing up Redis or RabbitMQ.
- You have moderate task volume (1K-10K/min) on a single node.
- You want priority queues, dashboards, and tracing out of the box.
When NOT to use fastworker
- You already operate Redis and want Celery's 20-year ecosystem of plugins.
- You need to scale to 100K+ tasks/min across multiple brokers — Celery + Redis is more battle-tested there.
Frequently asked questions
How does fastworker persist tasks without a broker?
fastworker embeds a SQLite-backed control plane on the master process. Workers register via mDNS or static config; the master hands out work over loopback or mTLS. Tasks are persisted in the master's SQLite file.
Can I run fastworker across multiple nodes?
Yes — the master can run on one node and workers on others, with mTLS for auth. For multi-master, see the federated mode in the docs.
Is fastworker a drop-in for Celery?
No — the task decorator API is similar but the configuration is different. Migration is a half-day of work for a typical Celery app.
How does fastworker compare to Dramatiq / RQ?
Dramatiq and RQ both require Redis. fastworker is the brokerless option. The trade-off: you give up the broker's existing operational maturity for a simpler deployment.