最新版生产环境后端

This commit is contained in:
XingQue
2026-06-12 03:43:54 +08:00
commit 25d6ec70f3
197 changed files with 74825 additions and 0 deletions

200
a_long_dianjing/celery.py Normal file
View File

@@ -0,0 +1,200 @@
"""
阿龙电竞 - 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()
app.autodiscover_tasks(['yonghu.tasks', 'yonghu.ranking_tasks', 'dingdan.tasks', 'peizhi.tasks'])
# 配置周期性任务Celery Beat Schedule
app.conf.beat_schedule = {
# 月榜数据转移每月最后一天23:50执行
'yuebang_zhuanyi': {
'task': 'yonghu.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': 'yonghu.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': 'yonghu.ranking_tasks.qingli_jiulishuju',
'schedule': crontab(hour=1, minute=0, day_of_month=1), # 每月1号凌晨1点
'options': {'queue': 'periodic_tasks', 'priority': 4},
},
# 🔥 补偿检查任务每5分钟运行
'check_order_expire_task': {
'task': 'dingdan.tasks.check_order_expire_task',
'schedule': crontab(minute='*/5000'),
'options': {'queue': 'order_tasks', 'priority': 3},
},
# 1. 每日凌晨0点执行 - 清零任务
'daily_reset_task': {
'task': 'yonghu.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': 'yonghu.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': 'peizhi.tasks.daily_sz_reset_task',
'schedule': crontab(hour=0, minute=5), # 每天0点5分
'options': {
'queue': 'periodic_tasks',
'priority': 4
},
'args': (),
'kwargs': {}
}
}
# 配置周期性任务Celery Beat Schedule
'''app.conf.beat_schedule = {
# 1. 每日凌晨0点执行 - 清零任务
'daily_reset_task': {
'task': 'yonghu.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': 'yonghu.tasks.monthly_reset_task',
'schedule': crontab(hour=0, minute=0, day_of_month=1), # 每月1日0点
'options': {
'queue': 'periodic_tasks',
'priority': 5
},
'args': (),
'kwargs': {}
},
# 3. 每5分钟检查一次待处理订单 - 作为补偿机制
'check_order_expire_task': {
'task': 'dingdan.tasks.check_order_expire_task',
'schedule': crontab(minute='*/5'), # 每5分钟
'options': {
'queue': 'order_tasks',
'priority': 3
},
'args': (),
'kwargs': {}
},
# 4. 每天凌晨0点5分清理收支记录
'daily_sz_reset_task': {
'task': 'peizhi.tasks.daily_sz_reset_task',
'schedule': crontab(hour=0, minute=5), # 每天0点5分
'options': {
'queue': 'periodic_tasks',
'priority': 4
},
'args': (),
'kwargs': {}
}
}'''
# 时区设置
app.conf.timezone = 'Asia/Shanghai'
app.conf.enable_utc = True
# 队列路由配置
app.conf.task_routes = {
'dingdan.tasks.*': {'queue': 'order_tasks'},
'yonghu.tasks.*': {'queue': 'periodic_tasks'},
'peizhi.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小时