shy3130
f03bc38a16
feat(screener): run_all 渐进式返回, 快策略先出、慢策略后台补算
策略页全量 run_all 需 ~2 分钟, 期间卡片全空。现在按历史耗时升序执行,
首返时限 (strategy_run_all_first_return_s, 默认 15s) 内算完的策略随
响应返回, 慢策略转后台继续算并逐个写入策略缓存, 前端轮询
cached-summary 逐个点亮卡片数字 (未出的显示脉冲占位)。
后端:
- services/strategy_run_queue: 单飞 daemon 工作线程 + handle 状态。
相同 key (资产/周期/日期/策略集) 且未完成的请求搭车现有执行不重算;
已完成的重跑即新执行。后端全局同时只跑一个 run_all, 补上前端
防重入之外的第二道 Numba 并发防线
- run_all 渐进分支 (仅日线 + summary_only): 逐策略增量写缓存 (同日
按 sid 合并), 收尾整体重写保持旧口径; 结果带 computed_at 时间戳;
分钟周期与明细请求保持整段阻塞不变
- 历史耗时落盘 user_data/strategy_run_timings.json, 次日起快策略自动
排前; cached-summary 透传 computed_at
前端:
- 请求通用 30s 超时 + 慢接口豁免清单 (run_all/run/backtest/factor 等
300s), 避免一个挂起请求占满 HTTP/1.1 连接拖死全站
- Screener: 收到 pending 后 summaryQuery 每 2s 轮询, 以
computed_at >= started_at 判新 (防同日旧缓存冒充), 8 分钟兜底;
StrategyCard 三种尺寸新增 computing 脉冲占位
验证: 新增 13 测试 (排序/落盘/搭车/串行化/端点行为/旧路径兼容),
全量套件 1762 passed; pnpm build 通过。
2026-09-07 15:25:54 +08:00
..
2026-07-26 12:19:55 +08:00
2026-06-18 17:18:23 +08:00
2026-09-05 15:41:15 +08:00
2026-09-04 12:50:50 +08:00
2026-07-08 18:10:19 +08:00
2026-07-03 14:11:27 +08:00
2026-08-30 19:05:31 +08:00
2026-08-05 17:56:27 +08:00
2026-09-05 15:41:15 +08:00
2026-09-03 13:20:59 +08:00
2026-09-04 12:03:06 +08:00
2026-08-28 10:15:54 +08:00
2026-09-05 22:49:52 +08:00
2026-08-30 19:05:30 +08:00
2026-09-04 16:37:06 +08:00
2026-09-07 08:10:38 +09:00
2026-09-06 23:16:27 +08:00
2026-09-06 23:16:27 +08:00
2026-08-30 19:05:21 +08:00
2026-09-04 12:03:06 +08:00
2026-08-30 19:05:26 +08:00
2026-09-02 20:20:38 +08:00
2026-08-16 23:39:07 +08:00
2026-08-31 16:50:21 +08:00
2026-07-05 22:57:46 +08:00
2026-07-06 17:00:56 +08:00
2026-07-08 18:10:19 +08:00
2026-09-06 17:39:43 +08:00
2026-09-04 11:59:00 +08:00
2026-08-31 16:50:21 +08:00
2026-08-16 23:39:07 +08:00
2026-07-08 18:10:19 +08:00
2026-09-04 12:03:06 +08:00
2026-08-16 23:39:07 +08:00
2026-08-16 23:39:07 +08:00
2026-08-16 23:39:07 +08:00
2026-08-16 23:39:07 +08:00
2026-08-16 23:39:07 +08:00
2026-08-16 23:39:07 +08:00
2026-08-16 23:39:07 +08:00
2026-09-01 13:05:21 +08:00
2026-06-23 21:47:29 +08:00
2026-08-30 19:05:27 +08:00
2026-09-06 23:38:55 +08:00
2026-09-07 15:25:41 +08:00
2026-09-04 12:19:35 +08:00
2026-08-23 19:12:57 +08:00
2026-09-04 11:59:00 +08:00
2026-09-03 13:45:12 +08:00
2026-08-31 16:50:21 +08:00
2026-09-04 12:03:06 +08:00
2026-07-08 18:10:19 +08:00
2026-07-20 13:01:03 +08:00
2026-09-07 15:25:54 +08:00
2026-08-30 19:05:28 +08:00
2026-09-02 14:48:32 +08:00
2026-09-02 14:48:32 +08:00
2026-09-05 21:14:53 +09:00
2026-07-09 16:35:21 +08:00