Files
weibo_signin/backend/task_scheduler/app/celery_app.py

55 lines
1.6 KiB
Python
Raw Normal View History

2026-03-09 14:05:00 +08:00
"""
Weibo-HotSign Task Scheduler Service
Celery app + Beat configuration.
策略 5 分钟运行一次 check_and_run_due_tasks
该任务从数据库读取所有 enabled Task croniter 判断
当前时间是否在 cron 窗口内±3 分钟如果是则提交签到
这样无需动态修改 beat_schedule简单可靠
2026-03-09 14:05:00 +08:00
"""
import os
2026-03-09 16:10:29 +08:00
import sys
import logging
2026-03-09 14:05:00 +08:00
from celery import Celery
from celery.schedules import crontab
2026-03-09 14:05:00 +08:00
# 确保 shared 模块可导入
2026-03-09 16:10:29 +08:00
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../.."))
from .config import settings
logger = logging.getLogger(__name__)
2026-03-09 14:05:00 +08:00
# Create Celery app
celery_app = Celery(
"weibo_scheduler",
2026-03-09 14:05:00 +08:00
broker=settings.CELERY_BROKER_URL,
backend=settings.CELERY_RESULT_BACKEND,
include=["task_scheduler.app.tasks.signin_tasks"],
2026-03-09 14:05:00 +08:00
)
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 点
},
},
2026-03-09 14:05:00 +08:00
)
# 导入 task 模块以注册
from .tasks import signin_tasks # noqa: F401, E402