From 529f70c414eec38be75328ca2b92269c7b8cdd82 Mon Sep 17 00:00:00 2001 From: XuYixiao Date: Sat, 5 Sep 2026 18:20:43 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F=E8=AE=A9=20baostock=20?= =?UTF-8?q?=E4=BD=9C=E4=B8=BA=E9=A6=96=E9=80=89=E8=A1=8C=E6=83=85=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 东财接口被持续风控时,_fetch_history 每轮都要先发一次注定失败的请求再回退 baostock,刷新间隔短时开销明显,日志中也堆满重复告警。 新增可选开关 PA_AGENT_BAOSTOCK_PRIMARY,置 1/true/yes 时直接先走 baostock, 失败仍回退原东财主源;前置条件为 self._baostock_ok,未连接时不启用。 默认关闭,不设置该变量时行为完全不变。 --- pa_agent/data/akshare_source.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/pa_agent/data/akshare_source.py b/pa_agent/data/akshare_source.py index 6d54bdfd..84c171aa 100644 --- a/pa_agent/data/akshare_source.py +++ b/pa_agent/data/akshare_source.py @@ -332,7 +332,20 @@ def _call_with_retries( assert last_exc is not None raise last_exc + @staticmethod + def _baostock_primary_enabled() -> bool: + """PA_AGENT_BAOSTOCK_PRIMARY=1 时优先走 baostock,不再每轮先撞东财风控。""" + flag = os.environ.get("PA_AGENT_BAOSTOCK_PRIMARY", "").strip().lower() + return flag in {"1", "true", "yes"} + def _fetch_history(self, symbol: str, timeframe: str, n: int) -> list[dict[str, Any]]: + if self._baostock_ok and self._baostock_primary_enabled(): + try: + return self._fetch_history_baostock(symbol, timeframe, n) + except Exception as exc: + logger.warning( + "Baostock 首选源失败 (%s): %s,回退 AkShare 主源", symbol, exc + ) try: if timeframe == "1d": return self._fetch_daily_ak(symbol, n)