""" 阿龙电竞 - Celery定时任务主配置 """ import os from celery import Celery from celery.schedules import crontab # 在 Django Shell 中执行 # 设置Django默认设置模块 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'a_long_dianjing.settings') # 创建Celery应用实例 app = Celery('a_long_dianjing') # 从Django settings中加载Celery配置(CELERY_前缀) app.config_from_object('django.conf:settings', namespace='CELERY') # 自动发现所有已注册app中的tasks.py文件 #app.autodiscover_tasks() # 自动发现任务(不含 orders.tasks:订单超时自动结算已永久关闭) app.autodiscover_tasks(['users.tasks', 'users.ranking_tasks', 'config.tasks', 'jituan.tasks']) # 配置周期性任务(Celery Beat Schedule) app.conf.beat_schedule = { # 月榜数据转移(每月最后一天23:50执行) 'yuebang_zhuanyi': { 'task': 'users.ranking_tasks.zhuanyi_yuebang', 'schedule': crontab(hour=23, minute=50, day_of_month='28-31'), # ✅ 修改这里 'options': {'queue': 'periodic_tasks', 'priority': 7}, }, # 日榜数据转移(每天23:55执行,在清零前) 'ribang_zhuanyi': { 'task': 'users.ranking_tasks.zhuanyi_ribang', #'schedule': crontab(minute='*/1'), # 每分钟执行一次,测试用 'schedule': crontab(hour=23, minute=55), # 每天23:55 'options': {'queue': 'periodic_tasks', 'priority': 7}, # 优先级高于清零任务 }, # 清理旧历史数据(每月1号凌晨1点执行) 'qingli_jiulishuju': { 'task': 'users.ranking_tasks.qingli_jiulishuju', 'schedule': crontab(hour=1, minute=0, day_of_month=1), # 每月1号凌晨1点 'options': {'queue': 'periodic_tasks', 'priority': 4}, }, # 补偿检查任务(订单自动结算已禁用) # 'check_order_expire_task': { # 'task': 'orders.tasks.check_order_expire_task', # 'schedule': crontab(minute='*/5000'), # 'options': {'queue': 'order_tasks', 'priority': 3}, # }, # 1. 每日凌晨0点执行 - 清零任务 'daily_reset_task': { 'task': 'users.tasks.daily_reset_task', 'schedule': crontab(hour=0, minute=0), # 每天0点 'options': { 'queue': 'periodic_tasks', 'priority': 5 }, 'args': (), 'kwargs': {} }, # 2. 每月1日凌晨0点执行 - 月度清零任务 'monthly_reset_task': { 'task': 'users.tasks.monthly_reset_task', 'schedule': crontab(hour=0, minute=0, day_of_month=1), # 每月1日0点 'options': { 'queue': 'periodic_tasks', 'priority': 5 }, 'args': (), 'kwargs': {} }, # 4. 每天凌晨0点5分清理收支记录 'daily_sz_reset_task': { 'task': 'config.tasks.daily_sz_reset_task', 'schedule': crontab(hour=0, minute=5), # 每天0点5分 'options': { 'queue': 'periodic_tasks', 'priority': 4 }, 'args': (), 'kwargs': {} }, # 5. 资金冻结到期解冻(默认无冻结单时几乎空跑) 'scan_fund_freeze_due': { 'task': 'jituan.tasks.scan_fund_freeze_due', 'schedule': crontab(minute='*/5'), 'options': { 'queue': 'periodic_tasks', 'priority': 4, }, }, } # 时区设置 app.conf.timezone = 'Asia/Shanghai' app.conf.enable_utc = True # 队列路由配置(orders.tasks 已移除:禁止 order_tasks 队列再调度超时结算) app.conf.task_routes = { # 'orders.tasks.*': {'queue': 'order_tasks'}, 'users.tasks.*': {'queue': 'periodic_tasks'}, 'config.tasks.*': {'queue': 'periodic_tasks'}, 'jituan.tasks.*': {'queue': 'periodic_tasks'}, } # 任务序列化 app.conf.accept_content = ['json'] app.conf.task_serializer = 'json' app.conf.result_serializer = 'json' # 任务超时设置 app.conf.task_time_limit = 300 # 任务最大执行时间300秒 app.conf.task_soft_time_limit = 240 # 软超时240秒 # Worker并发设置 app.conf.worker_concurrency = 4 app.conf.worker_prefetch_multiplier = 1 # 任务确认设置 app.conf.task_acks_late = True app.conf.worker_disable_rate_limits = True # 结果过期时间 app.conf.result_expires = 3600 # 任务结果保留1小时