更新 gpdm/stock.py
This commit is contained in:
parent
d986198103
commit
b7a6347dd3
@ -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)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user