定时任务逻辑优化
This commit is contained in:
@@ -1,54 +1 @@
|
||||
"""
|
||||
Weibo-HotSign Task Scheduler Service
|
||||
Celery app + Beat configuration.
|
||||
|
||||
策略:每 5 分钟运行一次 check_and_run_due_tasks,
|
||||
该任务从数据库读取所有 enabled 的 Task,用 croniter 判断
|
||||
当前时间是否在 cron 窗口内(±3 分钟),如果是则提交签到。
|
||||
这样无需动态修改 beat_schedule,简单可靠。
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import logging
|
||||
|
||||
from celery import Celery
|
||||
from celery.schedules import crontab
|
||||
|
||||
# 确保 shared 模块可导入
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../.."))
|
||||
|
||||
from .config import settings
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# Create Celery app
|
||||
celery_app = Celery(
|
||||
"weibo_scheduler",
|
||||
broker=settings.CELERY_BROKER_URL,
|
||||
backend=settings.CELERY_RESULT_BACKEND,
|
||||
include=["task_scheduler.app.tasks.signin_tasks"],
|
||||
)
|
||||
|
||||
celery_app.conf.update(
|
||||
task_serializer="json",
|
||||
accept_content=["json"],
|
||||
result_serializer="json",
|
||||
timezone="Asia/Shanghai",
|
||||
enable_utc=False,
|
||||
beat_schedule_filename="/tmp/celerybeat-schedule",
|
||||
beat_max_loop_interval=60,
|
||||
beat_schedule={
|
||||
"check-due-tasks": {
|
||||
"task": "task_scheduler.app.tasks.signin_tasks.check_and_run_due_tasks",
|
||||
"schedule": 60.0, # 每分钟检查一次(轻量查询,只在到期前 5 分钟才真正提交)
|
||||
},
|
||||
"cleanup-old-logs": {
|
||||
"task": "task_scheduler.app.tasks.signin_tasks.cleanup_old_signin_logs",
|
||||
"schedule": crontab(hour=3, minute=0), # 每天凌晨 3 点
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
# 导入 task 模块以注册
|
||||
from .tasks import signin_tasks # noqa: F401, E402
|
||||
# 此文件已废弃,调度器改用 APScheduler,入口见 main.py
|
||||
|
||||
Reference in New Issue
Block a user