3.1 KiB
3.1 KiB
实现计划:选股执行性能优化
Phase 1:基线与配置
- 增加
selection_max_workers=4和selection_batch_size=200配置,并同步.env.example、开发/生产 compose 的可配置环境变量。 - 为运行执行器增加 read/evaluate/persist 的安全汇总计时;不要输出单股行情或 凭据。
- 先运行现有 selection 测试,记录基线;确认工作区中没有用户并行改动。
Phase 2:连接池与批量存储
- 新增 selection PostgreSQL pool resource owner,支持注入 fake pool、open/close 和借用连接;在 presentation 组合层按数据库配置缓存并注册退出清理。
- 改造
PostgresMarketDataReader和PostgresSelectionRunRepository使用共享 pool,同时保留直接构造/测试兼容路径。 - 在
SelectionRunStore增加record_items;实现 chunk 内一次事务、itemexecutemany、signalexecutemany和重试幂等删除。 - 更新应用层 FakeStore、PostgreSQL adapter tests,锁定每批写入的 SQL 数量和 独立 signal 不丢失。
Phase 3:批量读取与四 worker
- 在 reader 的可选批量扩展和
EvaluateZhixingB1测试 seam 中加入批量 history 读取/已有 history 评估能力;保持单股execute兼容。 - 实现按
ts_code分组的 qfq 批量 SQL,移除当前 B1 不使用的历史 daily-basic join/字段,保留执行源的目标日 basic 完整性校验。 - 将
RunZhixingB1.execute改为 200 股票分块:批量读、4 worker 评估、聚合、批量 写入;批量扩展缺失时 fallback 到旧单股/单项接口;保留单股异常隔离和最终状态统计。 - 增加批量读取、缺失 history、worker 异常、重复批次写入和结果顺序稳定性测试。
Phase 4:质量门禁与实测
- 运行 selection 单元/golden/HTTP 测试,确认七类独立信号和重跑契约不变。
- 如 PostgreSQL 环境可用,使用固定目标日运行一次真实 harness,记录 worker=1 与 worker=4 的 read/evaluate/persist 以及总耗时;检查连接数没有超过 pool 上限。
- 运行完整后端格式、lint、type-check、pytest;必要时运行根目录 check/test。
- 检查 diff 只包含本任务文件,确认不包含 Redis 或无关前端改动。
主要验证命令
cd zhixing-server
uv run pytest tests/unit/selection tests/integration/test_zhixing_b1_golden.py -q
uv run pytest tests/test_selection_http.py -q
uv run ruff format --check .
uv run ruff check .
uv run pyright
uv run pytest
风险与回滚点
- pool 生命周期:先用 fake pool 测试 open/close,再接入 HTTP dependency;发生资源 泄漏时回滚组合层缓存,不动公式。
- 批量 SQL:先保持旧单股 reader/record wrapper,批量路径验证通过后再切换应用调用。
- 线程 worker:先以
max_workers=1验证结果等价,再使用默认 4;任何状态/信号差异 都回滚并发切换,保留批量读取/写入的独立改动。 - 内存:固定分块 200 并在每批完成后释放 histories;如果真实数据峰值过高,先调低
selection_batch_size,不增加 Redis。