2.5 KiB
2.5 KiB
实现八路同步与存储批量化
Goal
在不改变逐股六年 qfq、单股票事务/CSV 发布和覆盖率业务语义的前提下,把行情阶段从串行改为 默认 8 路受控并发,并消除 PostgreSQL 连接、审计写入和覆盖率查询的线性额外开销。
Dependencies
- 无子任务依赖;本任务是完整性检查后端的前置任务。
Requirements
ZHIXING_MARKET_DATA_MAX_WORKERS默认 8,CLI 实际传入同步用例;取值必须大于等于 1。- bar worker 只处理一只股票并返回不可变 outcome,主线程负责计数、进度和批量审计。
- 所有 worker 共用 Tushare 请求协调器;真实
daily/adj_factor调用能触发共享频控冷却, 正常流量不能被一个全局固定间隔重新串行化。 - 频控分类至少覆盖旧项目的中文提示、429 和 403;频控冷却默认 60/120/180 秒且可配置。
- 普通临时错误有界重试;数据验证错误不重试;所有日志安全且可统计等待时间。
pro_bar继续使用由pro_api(token)创建的 client,并保留 qfq 计算;内部隐藏重试不得绕开协调器。- PostgreSQL 使用线程安全连接池,每个 worker 借独立连接完成单股票事务。
market_sync_item由主线程分批 upsert;覆盖率由一个集合查询计算。- CLI 参数、退出码、失败重试、advisory lock、滚动清理和摘要字段保持兼容。
Acceptance Criteria
- 并发测试证明默认/配置 worker 上限有效,5002 个 fake 股票不会创建 5002 个线程。
- 不同完成顺序得到相同汇总;单股票失败不影响其他股票,失败股票不发布临时 CSV。
- 一个 worker 命中频控后,其他 worker 在共享冷却截止前不启动新的真实供应商调用。
pro_bar的daily与adj_factor都经过请求协调器,token client 回归测试继续通过。- PostgreSQL 集成测试覆盖多线程 upsert、事务回滚、批量 item 和集合覆盖率。
- 连接获取次数受池上限约束,覆盖率不再逐股票调用
has_bar/has_daily_basic。 - 同步用例、CLI 和 Tushare 单元测试通过;后端 Ruff、Pyright、pytest 全部通过。
- 无网络基准记录 5002 股票调度耗时、最大并发和 repository 调用数;生产 30 分钟目标标记为部署后验证。
Out of Scope
- 不改成按交易日增量下载,不持久化 adj_factor。
- 不增加 HTTP 或 Web 页面。
- 不改变六年窗口、数据表业务字段或选股资格语义。