customs-data / packages /core /celery_app.py
3v324v23's picture
feat: 新增智利海关数据接入链路,完善系统框架与文档
89d8756
Raw
History Blame Contribute Delete
1.32 kB
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 点执行
},
}