--- title: "Celery Queue–Worker Specialization" aliases: [celery-named-queues, celery-worker-routing, celery-task-queue-assignment] tags: [celery, python, worker, docker, gotcha, deployment] sources: - "daily/2026-04-30.md" created: 2026-04-30 updated: 2026-04-30 --- # Celery Queue–Worker Specialization When Celery tasks are routed to a named queue (e.g., `tts`), ONLY the container consuming that queue will process them. The main/orchestrator worker will not pick up tasks from specialised queues. Changing code in a specialised worker requires rebuilding THAT container, not the main worker. ## Key Points - Each Celery worker listens to one or more named queues — it will NOT process tasks from other queues - The orchestrator (`accessible-video-worker`) only processes tasks on its queue — it will never pick up tasks from `tts` queue - When tasks queue but completion counter stays at 0, always check whether the correct specialised worker is running and has the latest code - Fixing a bug in the TTS worker requires rebuilding `tts-worker`, NOT `accessible-video-worker` - This is intentional design: specialised workers optimise for specific hardware/dependency requirements ## Details ### Queue Assignment in Video Accessibility ``` Queue: celery (default) → accessible-video-worker (orchestrator) Queue: tts → tts-worker (TTS synthesis) Queue: transcription → transcription-worker (Whisper) ``` A task routed to `tts` queue: ```python @celery.task(queue="tts") def synthesize_speech(text: str, voice: str) -> str: ... ``` This task ONLY runs in the container started with `--queues tts`: ```bash celery -A app worker --queues tts --concurrency 2 ``` ### Debugging Stuck Tasks When tasks enqueue but completions stay at 0: ```bash # 1. Check which containers are running docker compose ps # 2. Check the correct worker is consuming its queue docker compose logs tts-worker --tail 50 # 3. Check Redis queue depth docker compose exec redis redis-cli LLEN tts # 4. Verify the worker is registered for the task docker compose exec tts-worker celery -A app inspect registered ``` ### Rebuild the Right Container ```bash # Bug is in TTS synthesis code: docker compose build tts-worker docker compose up -d tts-worker # NOT: docker compose build accessible-video-worker # wrong — won't fix tts tasks ``` ### When Tasks Queue But Don't Complete | Symptom | Likely cause | |---------|-------------| | Tasks in Redis `tts` queue, zero completions | `tts-worker` not running or on old code | | Tasks in Redis `celery` queue, zero completions | `accessible-video-worker` not running | | Tasks complete but error every time | Deterministic error — see [[wiki/concepts/celery-redis-queue-flush-on-deterministic-error]] | ## Related Concepts - [[wiki/concepts/celery-redis-queue-flush-on-deterministic-error]] — flushing Redis when the right worker is running but tasks keep failing - [[wiki/tech-patterns/redis-celery-worker-queue]] — Redis + Celery full pattern reference for Oliver projects ## Sources - [[daily/2026-04-30.md]] — Session 21:14, TTS tasks queuing but completions at 0 — wrong worker rebuilt