Define task queues and routing in your Celery config: set task_queues with Queue objects and task_routes to map task names to specific queues
Start workers bound to specific queues with celery worker -Q queue_name to control which workers process which tasks
Set acks_late=True on tasks that must not be lost on worker crash; the message is acknowledged only after the task function returns
Pair acks_late with task_reject_on_worker_lost=True so that if a worker dies mid-task the message is re-queued rather than lost
Use task_always_eager=False in production; set it True only in tests to run tasks synchronously without a broker
Known gotchas
With acks_late and prefetch_multiplier greater than 1, a worker can hold multiple unacknowledged messages; if it crashes, all are re-queued and may execute multiple times on other workers
Default prefetch_multiplier is 4; set worker_prefetch_multiplier=1 for long-running tasks with acks_late to prevent one worker from hoarding messages
Celery's ETA and countdown tasks are held in memory by the broker or worker until due; very large numbers of scheduled tasks can exhaust broker memory
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp