Files
Jyotisha/docs/testing/api-chart-subprocess-gate-ab-20261013.md
T
jesse-uxGrok (agent loop)Cursor
336286e428 fix(chart): skip unused synastry overview and doomed report subprocesses
Synastry charts now skip the unused external overview and run together. Reports skip PyJHora subprocesses when that library is missing, and a full heavy-compute slot logs which paths hold it. Splitting quotas stays a simulation.

Gate, growth, and report pytest passed, as did the frontend route tests, tsc, lint, and the A/B script.

Co-Authored-By: Grok (agent loop)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-15 08:02:39 +08:00

3.6 KiB
Raw Blame History

合盘排盘与报告子进程 A/B(2026-10-15)

Windows 本机,工作树 .venv 的 python.exe。importlib.util.find_spec("jhora") 是 None。python3 指向 Windows 应用商店占位程序,python3.14 不存在。Docker 守护进程在,本机没有 jyotisha-api 镜像,所以没有进镜像再探一次。本机没有 VedAstro SDK,外网关闭(VEDASTRO_ENABLE_NETWORK=0)。没有「真 SDK」一组。

脚本:scripts/research/api_chart_subprocess_ab.py。每组 3 次,取中位数。盘是任务书里的虚构盘(1990-01-01 12:00 与 1992-01-02 12:00,新德里)。星盘缓存 TTL 设为 0。易变字段在比对前丢掉:generated_at、created_at、timestamp、elapsed_seconds、elapsed_ms、duration_ms、request_id。原始数字在同目录 api-chart-subprocess-gate-ab-20261013.json。

对照不是另一次 git show 出 staging 再导入。星盘对照是本分支的 _compute_chart_sync:不带 skip、两张盘串行。报告对照是本分支把「参照引擎已安装」强制打开,从而仍会起子进程;静态校验缓存和解释器查找缓存两边都开着。所以报告耗时差只含那 6 个注定失败的回放进程,不含静态校验少跑的那一次。静态校验「连调两次只跑一次」由单测覆盖。

合盘两张盘

中位耗时 中位 subprocess.run 次数 盘面摘要
对照:不带 skip,串行 8.0596 秒 2 —
本单:带 skip,并发 0.0166 秒 0 与对照逐字节一致

0.0166 / 8.0596 ≈ 0.2%,低于「不超过对照 10%」的线。子进程从 2 降到 0。任务书写的「4 → 0」是按每张盘 2 个子进程、两张合计 4 个来估的。这台机器上两张盘合计只数到 2 次 subprocess.run。不带 skip 的 8 秒里,大部分是没装 SDK 时子进程空等,不是盘面计算本身。

个人长报告(完整数据版,中英,带事实表)

中位耗时 中位 subprocess.run 次数 中英正文与事实表
对照:强制仍起回放子进程 16.5322 秒 7 —
本单:没装参照引擎就不起 15.3235 秒 1 去掉易变字段后逐字节一致

少 6 次,对应年度回放 3 次和 Tajika 3 次。剩下的 1 次两边都有,短路没有把它去掉。子进程数 1,低于「模拟生产不超过 3」的线。耗时 15.32 秒,不比对照的 16.53 秒差。本机没装 PyJHora,没有再跑「装了参照引擎」的一组;那种环境仍必须走子进程,单测用桩覆盖。

生产上的收益仍按任务书:大约每份报告 0.5 到 0.9 秒,不是装了参照引擎的机器上看到的约 5 秒。

名额方案模拟(没改规则)

固定一分钟:2 份报告(每次 13 秒)、20 次咨询(每次 0.2 秒)、6 次校正打分(每次 8 秒)。随机种子 64。并发上限按现状 2。O2、O3、O4 只在脚本里模拟。

方案 咨询被拒 报告被拒 校正被拒 同时在跑的最高个数 是否碰到「不得加池、不得提高并发」
O1 现状 40% 0% 17% 2 否
O2 咨询单独小池 0% 0% 17% 3 是,本单不实现
O3 咨询最多再等 1.5 秒 30% 0% 33% 2 否,本单不实现
O4 重任务最多占 1 个名额 0% 0% 67% 2 否,本单不实现

这是一分钟的草图,不是 staging 上的真实频率。咨询少被拒的时候,校正会多被拒(O3、O4)。O2 咨询不再被拒,但同时在跑的个数到了 3,越过了现在的上限。