"""Celery application with the four queues from TD-11 / 架构文档 §3.1. gpu 换装、发型、抠图 —— 并发上限由 GPU 容量决定,队列即容量 (§7.3) cpu 报告视觉分析、渲染 io 外部 API 调用、推送、上传 beat 定时任务(单实例,防重) Queue isolation is the point: 换装排队不能把报告生成拖慢。 """ from __future__ import annotations from celery import Celery from kombu import Queue from packages.shared.config import get_settings from packages.shared.logging import configure_logging settings = get_settings() configure_logging( level=settings.log_level, json_output=settings.log_json, extra_redact_keys=settings.extra_redact_keys, ) celery_app = Celery( "meida", broker=settings.celery_broker_url, backend=settings.celery_result_backend, include=["apps.worker.tasks"], ) celery_app.conf.update( task_default_queue="cpu", task_queues=( Queue("gpu"), Queue("cpu"), Queue("io"), Queue("beat"), ), task_routes={ "meida.tryon.*": {"queue": "gpu"}, "meida.matting.*": {"queue": "gpu"}, "meida.report.*": {"queue": "cpu"}, "meida.notify.*": {"queue": "io"}, }, task_acks_late=True, task_reject_on_worker_lost=True, task_track_started=True, worker_prefetch_multiplier=1, broker_connection_retry_on_startup=True, timezone="Asia/Shanghai", result_expires=86400, )