import os from celery import Celery from celery.schedules import crontab from packages.core.config import settings # 初始化 Celery 应用 # 默认使用 Redis 作为 broker 和 backend,可通过环境变量覆盖 redis_url = os.environ.get("CELERY_BROKER_URL", "redis://localhost:6379/0") celery_app = Celery( "customs_data_worker", broker=redis_url, backend=redis_url, include=["apps.worker.celery_tasks"] ) # 配置 Celery celery_app.conf.update( task_serializer="json", accept_content=["json"], result_serializer="json", timezone="UTC", enable_utc=True, task_track_started=True, task_time_limit=3600 * 2, # 任务最长执行 2 小时 worker_max_tasks_per_child=50, # 防止内存泄漏 ) # 注册定时任务 (Cron) celery_app.conf.beat_schedule = { "sync-brazil-daily": { "task": "apps.worker.celery_tasks.sync_brazil", "schedule": crontab(hour=2, minute=0), # 每天凌晨 2 点执行 }, "sync-chile-daily": { "task": "apps.worker.celery_tasks.sync_chile", "schedule": crontab(hour=3, minute=0), # 每天凌晨 3 点执行 }, "sync-extended-mock-daily": { "task": "apps.worker.celery_tasks.sync_extended_mock", "schedule": crontab(hour=4, minute=0), # 每天凌晨 4 点执行 }, }