新增任务,手动触发定时任务更新

This commit is contained in:
2026-03-18 13:58:37 +08:00
parent 07097091fe
commit 2427237116

View File

@@ -44,6 +44,9 @@ _registered_tasks: dict = {} # task_id -> cron_expression
SIGNIN_LOG_RETAIN_DAYS = int(os.getenv("SIGNIN_LOG_RETAIN_DAYS", "30"))
CLEANUP_BATCH_SIZE = 1000
# Redis 订阅线程是否运行
_redis_listener_running = False
WEIBO_HEADERS = {
"User-Agent": (
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
@@ -384,10 +387,49 @@ async def _async_cleanup():
return {"deleted": total_deleted, "cutoff": cutoff.isoformat()}
# =============== Redis 订阅(实时同步任务变更) ===============
def _start_redis_listener():
"""启动 Redis pub/sub 监听线程,收到 task_updates 消息后立即同步。"""
global _redis_listener_running
if not shared_settings.USE_REDIS or not shared_settings.REDIS_URL:
logger.info("⚠️ Redis 未启用,任务变更仅靠 5 分钟轮询同步")
return
import threading
import redis
def _listen():
global _redis_listener_running
_redis_listener_running = True
logger.info("📡 Redis 订阅线程启动,监听 task_updates 频道")
while _redis_listener_running:
try:
r = redis.from_url(shared_settings.REDIS_URL, decode_responses=True)
pubsub = r.pubsub()
pubsub.subscribe("task_updates")
for message in pubsub.listen():
if not _redis_listener_running:
break
if message["type"] == "message":
logger.info(f"📡 收到任务变更通知: {message['data'][:200]}")
sync_db_tasks()
pubsub.close()
r.close()
except Exception as e:
logger.warning(f"Redis 订阅异常5 秒后重连: {e}")
_time.sleep(5)
t = threading.Thread(target=_listen, daemon=True, name="redis-listener")
t.start()
# =============== 启动入口 ===============
def _shutdown(signum, frame):
global _redis_listener_running
logger.info(f"收到信号 {signum},正在关闭调度器...")
_redis_listener_running = False
scheduler.shutdown(wait=False)
sys.exit(0)
@@ -407,6 +449,9 @@ if __name__ == "__main__":
# 首次同步 DB 任务
sync_db_tasks()
# 启动 Redis 订阅,实时接收任务变更通知
_start_redis_listener()
# 每 5 分钟重新同步 DB处理新增/删除/修改的任务)
scheduler.add_job(
sync_db_tasks,