From b7a6347dd3233cdfc46a90542b894b7b0d89fa24 Mon Sep 17 00:00:00 2001 From: lj091715 <1091062319@qq.com> Date: Tue, 19 May 2026 10:58:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20gpdm/stock.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gpdm/stock.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/gpdm/stock.py b/gpdm/stock.py index cf0808a..126a1c5 100644 --- a/gpdm/stock.py +++ b/gpdm/stock.py @@ -20,6 +20,27 @@ QUOTE_API_URL = "https://api.mairuiapi.com/hsrl/ssjy/{}/{}" DEFAULT_LICENCE = "3E81CB37-4BCE-4DAF-B0AC-AEA069A58973" FALLBACK_TEXT = "股票查询失败,请稍后再试。" +# 防重复标记:5秒内防止同一股票代码被重复查询 +_LOCK_FILE = os.path.join(os.path.dirname(__file__), ".stock_lock") +_LOCK_TTL = 5 # 秒 + + +def _acquire_lock(stock_code: str) -> bool: + """尝试获取锁,成功返回True,失败(被锁定)返回False""" + import time + try: + if os.path.exists(_LOCK_FILE): + with open(_LOCK_FILE, "r") as f: + locked_code, lock_time = f.read().strip().split("|") + lock_time = float(lock_time) + if locked_code == stock_code and time.time() - lock_time < _LOCK_TTL: + return False # 还在锁定期内,跳过 + with open(_LOCK_FILE, "w") as f: + f.write(f"{stock_code}|{time.time()}") + except Exception: + pass + return True + # 股票名称 → 代码映射(常用 A 股) STOCK_NAME_MAP = { # 指数 @@ -278,6 +299,10 @@ def main() -> int: sys.stdout.write("\n") return 0 + # 防重复:5秒内相同股票不重复查询 + if not _acquire_lock(stock_code): + return 0 + data = fetch_stock_quote(stock_code) if not data: sys.stdout.write(FALLBACK_TEXT)