定时任务逻辑优化

This commit is contained in:
2026-03-18 13:52:47 +08:00
parent fecb42838c
commit 07097091fe
6 changed files with 450 additions and 516 deletions

View File

@@ -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