"""Celery приложение индексер-воркера.""" from celery import Celery from app.config import settings celery_app = Celery( "worker_indexer", broker=settings.RABBITMQ_URL, backend=settings.REDIS_URL, include=["app.tasks.index"], ) celery_app.conf.update( task_serializer="json", result_serializer="json", accept_content=["json"], timezone="Europe/Moscow", enable_utc=True, task_track_started=True, task_routes={ "gpu.*": {"queue": "queue.gpu"}, "index.*": {"queue": "queue.index"}, "notify.*": {"queue": "queue.notify"}, "gost.*": {"queue": "queue.gost"}, }, task_acks_late=True, task_reject_on_worker_lost=True, # Один неподтверждённый месседж на процесс пула. При acks_late=True всё # предвыбранное висит unacked, а RabbitMQ рвёт канал по consumer_timeout # (1800с) с момента ДОСТАВКИ, а не начала выполнения. С дефолтным префетчем # (4×concurrency) массовая заливка — сотни долгих run_parser в очереди — # гарантированно роняет воркер на задачах, которые ещё даже не начинались, # и он уходит в краш-луп на передоставленных сообщениях (docs/DR-HA.md §6). worker_prefetch_multiplier=1, result_expires=86400, )