""" Celery应用配置 """ from celery import Celery from celery.schedules import crontab from app.config import settings from app.logger import get_celery_logger, get_celery_beat_logger, get_celery_worker_logger, LoggerManager # 确保日志系统初始化 LoggerManager.setup_logging() logger = get_celery_logger() beat_logger = get_celery_beat_logger() worker_logger = get_celery_worker_logger() # 创建Celery应用实例 celery_app = Celery( "ai_talk_callback", broker=settings.celery_broker_url, backend=settings.celery_result_backend, include=['app.celery_tasks'] ) # Celery配置 celery_app.conf.update( task_serializer=settings.celery_task_serializer, result_serializer=settings.celery_result_serializer, accept_content=settings.celery_accept_content, timezone=settings.celery_timezone, enable_utc=settings.celery_enable_utc, task_track_started=True, task_time_limit=30 * 60, # 30分钟超时 task_soft_time_limit=25 * 60, # 25分钟软超时 worker_prefetch_multiplier=1, worker_max_tasks_per_child=1000, # Worker日志配置 worker_log_format='[%(asctime)s: %(levelname)s/%(processName)s] %(message)s', worker_task_log_format='[%(asctime)s: %(levelname)s/%(processName)s][%(task_name)s(%(task_id)s)] %(message)s', # Beat 调度配置 # crontab(hour=9, minute=0) # 每天上午9点执行 beat_schedule={ 'push-data-to-dtc-every-minute': { 'task': 'push_data_to_dtc', 'schedule': 120.0, # 每120秒执行一次(2分钟) }, 'daily-morning-task': { 'task': 'call_api', 'schedule': 120.0, # 每120秒执行一次(2分钟) }, }, ) logger.info("🌿 Celery应用配置完成") beat_logger.info("📅 Celery Beat 调度器配置完成") beat_logger.info("📋 定时任务列表:") for task_name, task_config in celery_app.conf.beat_schedule.items(): beat_logger.info(f" - {task_name}: {task_config['schedule']}秒") # Worker 配置日志 worker_logger.info("🔧 Celery Worker 配置完成") worker_logger.info("⚙️ Worker 配置参数:") worker_logger.info(f" - 任务超时: {celery_app.conf.task_time_limit}秒") worker_logger.info(f" - 软超时: {celery_app.conf.task_soft_time_limit}秒") worker_logger.info(f" - 预取倍数: {celery_app.conf.worker_prefetch_multiplier}") worker_logger.info(f" - 每个子进程最大任务数: {celery_app.conf.worker_max_tasks_per_child}") worker_logger.info(f" - 包含模块: {celery_app.conf.include}")