更新 gpdm/stock.py

This commit is contained in:
lj091715 2026-05-19 10:58:06 +08:00
parent d986198103
commit b7a6347dd3

View File

@ -20,6 +20,27 @@ QUOTE_API_URL = "https://api.mairuiapi.com/hsrl/ssjy/{}/{}"
DEFAULT_LICENCE = "3E81CB37-4BCE-4DAF-B0AC-AEA069A58973" DEFAULT_LICENCE = "3E81CB37-4BCE-4DAF-B0AC-AEA069A58973"
FALLBACK_TEXT = "股票查询失败,请稍后再试。" 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 股) # 股票名称 → 代码映射(常用 A 股)
STOCK_NAME_MAP = { STOCK_NAME_MAP = {
# 指数 # 指数
@ -278,6 +299,10 @@ def main() -> int:
sys.stdout.write("\n") sys.stdout.write("\n")
return 0 return 0
# 防重复5秒内相同股票不重复查询
if not _acquire_lock(stock_code):
return 0
data = fetch_stock_quote(stock_code) data = fetch_stock_quote(stock_code)
if not data: if not data:
sys.stdout.write(FALLBACK_TEXT) sys.stdout.write(FALLBACK_TEXT)