瀏覽代碼

fix(account): 全局标记防 scheduler 重复启动

alphah 3 周之前
父節點
當前提交
c3d2cc14fc
共有 1 個文件被更改,包括 12 次插入11 次删除
  1. 12 11
      backend/app/plugin/module_payment/account/controller.py

+ 12 - 11
backend/app/plugin/module_payment/account/controller.py

@@ -589,11 +589,17 @@ async def receipt_download_controller(
 from apscheduler.schedulers.asyncio import AsyncIOScheduler
 
 scheduler = AsyncIOScheduler()
+_scheduler_started = False
 
 
 @AccountRouter.on_event("startup")
 async def start_retry_scheduler():
-    """启动时立即执行一次,之后每分钟执行"""
+    """启动时立即执行一次,之后每分钟执行(只启动一次,防多 router 重复触发)"""
+    global _scheduler_started
+    if _scheduler_started:
+        return
+    _scheduler_started = True
+
     log.info("[重试任务] 启动反查定时任务")
     try:
         await AccountService.retry_dealing_transfers()
@@ -608,18 +614,13 @@ async def start_retry_scheduler():
         id='retry_dealing_transfers',
         replace_existing=True,
     )
-    if not scheduler.running:
-        scheduler.start()
-    else:
-        log.debug("[重试任务] 调度器已在运行,跳过启动")
+    scheduler.start()
+    log.info("[重试任务] 定时任务已注册(每分钟执行)")
     log.info("[重试任务] 定时任务已注册(每分钟执行)")
 
 
 @AccountRouter.on_event("shutdown")
 async def stop_retry_scheduler():
-    try:
-        if scheduler.running:
-            scheduler.shutdown(wait=False)
-            log.info("[重试任务] 定时任务已停止")
-    except Exception:
-        pass
+    if scheduler.running:
+        scheduler.shutdown(wait=False)
+        log.info("[重试任务] 定时任务已停止")