Generated by Answer me with HTML 0.5.5 · 2026-10-20 20:35 · ★ Star on GitHub

K线缓存刷新失败 · 原因定位

2026-10-20 LXXG 盘后流水线 step3

Lead: 一只指数代码的除权接口超时,把整批判成了失败。行情数据本身没丢。

A

结论

单点超时,整批判失败

sh000002(上证A股指数)拉除权记录超时。 脚本把任一标的失败当作整批失败,退出码 1。 实际数据已到位:9713 只 npz 里只有这 1 只落后 1 天。

  • 落后文件:1 只,共 9713 只
  • 落后日期:20261019,差 1 天
  • 下游信号库:正常,ok=5389
  • 今日选股:正常出报告
  • 历史频次:近 20 个交易日仅今天 1 次
B

证据链

  1. 18:30流水线启动step1b 数据日=20261019,包待更新
  2. 18:36TDX 包刷新549.5MB,12212 只,数据日=20261020
  3. 18:57qfq 重建开始stale_only,2 进程
  4. 19:01单点超时[w1] xdxr_err sh000002: TimeoutError
  5. 19:01全批判失败ok=8492 exists=1220 short=628 xdxr_err=1
  6. 19:04信号库重建ok=5389,正常
  7. 19:07选股报告市场 2026-10-20,正常
C

代码为什么没兜住

  • fq_utils.py:22:客户端初始化 _client() 写在 try 之外,超时直抛
  • build_qfq_from_day.py:277:xdxr_err ≥ 1 即 sys.exit(1)
  • 判断不看失败代码是不是指数,一只失手全线标红
  • 指数没有分红,本不该查除权,查了反成失效点
D

已修复与加固建议

已修复

20:28 重跑 build_qfq_from_day.py --stale-only,补建 1 只成功,rc=0。 复查全库落后文件 = 0,sh000002 已到 20261020。

加固三条,待你拍板:

  1. 客户端初始化移进 try,加 3 次退避重试
  2. 指数代码(sh000xxx / sz399xxx / 880 / 881)跳过除权查询
  3. 仅指数失败时降为 WARN,退出码不置 1