Отделите долгую задачу в собственную очередь и worker-пул, чтобы она не занимала ресурсы коротких заданий. По возможности разбейте четыре часа работы на возобновляемые части.
[имя] спрашивает, что можно сделать, если есть тяжёлая задача в Celery, которая выполняется четыре часа и блокирует выполнение других?
Отделите долгую задачу в собственную очередь и worker-пул, чтобы она не занимала ресурсы коротких заданий. По возможности разбейте четыре часа работы на возобновляемые части.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Отделите долгую задачу в собственную очередь и worker-пул, чтобы она не занимала ресурсы коротких заданий. По возможности разбейте четыре часа работы на возобновляемые части.
Проверьте, чем задача ограничена — CPU, сетью, БД или ожиданием внешнего сервиса. Настройте concurrency и prefetch под длительность, а timeout и подтверждения — под выбранный broker и модель доставки.
Нужны checkpoint, heartbeat, идемпотентность и восстановление после падения worker. Не увеличивайте число процессов бесконечно, если узкое место — одна БД. Синхронное ожидание дочерних Celery-задач внутри worker также может заблокировать пул. Изоляция очереди помогает управлять ресурсами, но не ускоряет алгоритм автоматически.
Источник: docs.celeryq.dev.