From c97fbbad0e7205317710db64f190ec694c316fba Mon Sep 17 00:00:00 2001 From: zzhyyyyy <2685922758@qq.com> Date: Fri, 17 Jul 2026 23:03:13 +0800 Subject: [PATCH] =?UTF-8?q?feat(wx-finance):=20=E4=BC=9A=E8=AF=9D=E5=AD=98?= =?UTF-8?q?=E6=A1=A3=E8=BD=AE=E8=AF=A2=E9=97=B4=E9=9A=94=203s=E2=86=920.5s?= =?UTF-8?q?(=E6=94=AF=E6=8C=81=E4=BA=9A=E7=A7=92,=20int=E2=86=92float)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit mentor 要求把会话存档轮询从 3s 提到 0.5s。WX_FINANCE_POLL_INTERVAL_SEC 由 int 改 float (默认 0.5), poller 的可打断 sleep 从 range(int) 改为按 ≤0.5s 分片的 while 循环(原 range() 不吃 float、无法支持亚秒间隔), 启动日志 %d→%s。 Co-Authored-By: Claude Opus 4.8 --- app/core/config.py | 2 +- scripts/wx_finance_poller.py | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) 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 已停止")