diff --git a/app/core/config.py b/app/core/config.py index 3bd3446..c4a9dd6 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -165,7 +165,7 @@ class Settings(BaseSettings): WX_FINANCE_SECRET: str = "" # 会话存档【专用】Secret(≠微信客服/自建应用) WX_FINANCE_SDK_PATH: str = "./libWeWorkFinanceSdk_C.so" # WeWorkFinanceSdk C 库(Linux .so) WX_FINANCE_PRIVATE_KEY_PATH: str = "./secrets/wx_finance_private.pem" # RSA 私钥(解 encrypt_random_key) - WX_FINANCE_POLL_INTERVAL_SEC: int = 3 # GetChatData 轮询间隔(无回调, 自己定频) + WX_FINANCE_POLL_INTERVAL_SEC: float = 0.5 # GetChatData 轮询间隔秒(无回调、自己定频;支持亚秒如 0.5) WX_FINANCE_SEQ_FILE: str = "./data/wx_finance_seq.txt" # seq 游标持久化(防丢/重复) WX_FINANCE_RECEIVER_USERID: str = "" # 接收成员 userid(万朗杰);只处理【非他发】的消息, 空=不过滤 WX_FINANCE_INTERNAL_URL: str = "http://127.0.0.1:8770" # poller 通知 app-server 打信号的内部地址(同机) diff --git a/scripts/wx_finance_poller.py b/scripts/wx_finance_poller.py index 83198eb..f3f7083 100644 --- a/scripts/wx_finance_poller.py +++ b/scripts/wx_finance_poller.py @@ -94,7 +94,7 @@ def main() -> None: ) seq = _load_seq() logger.info( - "wx_finance poller 启动, 从 seq=%d 轮询, 间隔 %ds", seq, settings.WX_FINANCE_POLL_INTERVAL_SEC + "wx_finance poller 启动, 从 seq=%d 轮询, 间隔 %ss", seq, settings.WX_FINANCE_POLL_INTERVAL_SEC ) with httpx.Client() as client: while not _stop: @@ -115,11 +115,13 @@ def main() -> None: logger.exception("GetChatData 出错") except Exception: logger.exception("轮询异常") - # 可打断的 sleep(收到 SIGTERM 尽快退) - for _ in range(max(1, settings.WX_FINANCE_POLL_INTERVAL_SEC) * 2): - if _stop: - break - time.sleep(0.5) + # 可打断的 sleep:按 ≤0.5s 分片, 支持亚秒间隔(如 0.5s), 收到 SIGTERM 尽快退 + interval = max(0.1, settings.WX_FINANCE_POLL_INTERVAL_SEC) + step = min(0.5, interval) + slept = 0.0 + while slept < interval and not _stop: + time.sleep(step) + slept += step sdk.close() logger.info("wx_finance poller 已停止")