[Bug] 个股资金流 capital_flow 取数「挂死」而非「慢」:放大超时无效,duration_ms 恒等于超时值
Author: YHQS1997Created Sep 24, 2026Updated Sep 24, 2026
环境
| 项 | 值 |
|---|---|
| 软件版本 | v3.32.0(桌面版 Electron,构建 2026-09-06) |
| 系统 | Windows 11 x64 |
| 配置 | FUNDAMENTAL_STAGE_TIMEOUT_SECONDS=45 / FUNDAMENTAL_FETCH_TIMEOUT_SECONDS=15 / ENABLE_EASTMONEY_PATCH=true |
现象
capital_flow(个股资金流)在每次分析中 100% 失败,与网络状况无关:
"capital_flow": {
"status": "failed",
"errors": ["capital_flow timeout"],
"source_chain": [{"provider": "fundamental_pipeline",
"result": "failed",
"duration_ms": 45000}]
}关键证据:这是「挂死」,不是「预算不够」
判断依据:source_chain.duration_ms 与所设超时值的对照。
| 实验轮 | FETCH 超时设定 | 实测 duration_ms | 分析总耗时 |
|---|---|---|---|
| 第一轮 | 15s | 45000(stage 45s 到点被杀) | ~90s |
| 第二轮 | 45s | 仍然 45000 | 4 分钟以上 |
第二轮把 FETCH 超时从 15s 放大到 45s,duration_ms 纹丝不动地等于 stage 的 45 秒——
说明资金流取数在 stage 预算内阻塞到 stage 超时被整体杀掉,放大 FETCH 超时零收益,
反而让每次分析白白多等一分钟以上。已回退到 45/15。
判据(供排查参考):
duration_ms ≈ 所设超时值→ 挂死(阻塞到超时被杀),放大超时无用duration_ms < 所设超时值但仍失败 → 真预算不足,放大超时才有意义
补充
- 同一时段、同一配置下,
earnings/dragon_tiger/boards均可成功(ENABLE_EASTMONEY_PATCH=true+ 45/15/2), 说明网络与东财限流不是本项的主因。 - 与 #2247(妙想 MX_API 补充筹码分布/个股资金流数据源)提到的问题方向一致,供交叉参考。
已排除「配置没拉满」的可能
提交前已对照上游 main 分支的 .env.example(334 个配置项)逐项核对:
上游模板中不存在任何与「个股资金流 / capital flow」相关的配置项或数据源开关; 唯一的数据源优先级配置组(
EFINANCE_PRIORITY/AKSHARE_PRIORITY/TUSHARE_PRIORITY…) 模板注释明确写了「仅控制普通 A 股日 K 通用链路」,不作用于基本面聚合链路。相关配置当前值均已高于上游默认值:
配置 上游默认 本例值 FUNDAMENTAL_STAGE_TIMEOUT_SECONDS8.0 45.0 FUNDAMENTAL_FETCH_TIMEOUT_SECONDS8.0 15.0 FUNDAMENTAL_RETRY_MAX1 2 ENABLE_EASTMONEY_PATCHfalse true 同一次分析中
earnings/dragon_tiger/boards已能成功,说明并非全局网络或限流问题。
建议修复方向
- 排查
fundamental_pipeline中资金流取数是否存在无内部超时的同步阻塞调用(如 requests 未设 timeout、 或在事件循环里同步等待)。 - 若短期难修,建议给资金流单项加独立子超时,避免它拖死整个 fundamental stage。
- 文档中给出
duration_ms判据,帮助用户区分「慢」与「挂死」。
本 issue 由用户实际排障整理,数据取自 analysis_history.context_snapshot 的结构化字段,非日志猜测。
Source: ZhuLinsen/daily_stock_analysis