Everything FastWorker does.
A complete tour of FastWorker's capabilities — what it includes, what it doesn't, and why.
Brokerless architecture
FastWorker uses direct peer-to-peer NNG messaging between Python processes. No Redis, no RabbitMQ, no Kafka. That means one less service to deploy, monitor, secure, and upgrade — and one less source of split-brain failures in production.
Control plane architecture
A single control plane coordinates task distribution and holds the result cache. Subworkers register automatically and pull tasks via a DEALER/ROUTER NNG pattern. The control plane itself processes tasks too, so a minimal deployment is one process.
Built-in management GUI
A Vue 3 + Tailwind dashboard ships with the control plane and auto-starts at http://127.0.0.1:8080. See active workers, queue depth by priority, task history, and cache stats in real time — no Flower, no rq-dashboard, no extra service.
Automatic worker discovery
Subworkers discover the control plane on startup and register automatically. Scale horizontally by spawning another process. No reconfiguration, no service registry, no broker topology to manage.
Priority queues
Four priority levels — critical, high, normal, low — are built in. Tasks route to the least-loaded subworker at the highest priority available. No custom queue routing rules to maintain.
Result caching with LRU eviction
The control plane keeps a configurable result cache (default: 10,000 entries, 1-hour TTL). Expired entries are cleaned every minute. Configurable via --result-cache-size and --result-cache-ttl.
Task completion callbacks
Get real-time notifications when tasks finish — no polling loop required. Wire callbacks into websockets, SSE streams, or any async hook in your FastAPI app.
Native FastAPI integration
The async Client was designed for FastAPI request handlers. Call await client.delay(...) from any endpoint and the task runs on the control plane or a subworker — no sync wrapper, no thread-pool gymnastics.
OpenTelemetry support
Opt-in distributed tracing and metrics via OTLP. Send spans to Jaeger, Honeycomb, Tempo, or any OpenTelemetry collector to trace a task from HTTP request all the way through execution.
Zero configuration
Everything works out of the box with sensible defaults. No YAML, no .env files, no discovery services. Override what you need via CLI flags or environment variables when you need to.