SOP — 共享库 precheck_module 新增 ProbeBatch(只读探测批量化上移)¶
变更日期:2026-10-08 | 变更类型:C 类(共享库结构调整,向后兼容) 交付物:
~/py_public_modules/precheck_module.py新增ProbeBatch类;eda_tools_ins三处工程删除同名副本并改走共享库。
1. 背景¶
2026-10-08 的「只读探测批量化」改造中,eda_tools_ins 下的三个在用子工程各自新增了一份 utils/probe_batch.py(5580 B × 3,cmp 实测内容完全一致),提供「记录 → 打包预取 → 命中缓存」三件套。
该模块进入第二次复用,按共享库判据(同名副本出现 ≥2 处且内容一致 → 上移)应集中一份;同时它与 base_module 已有的 query_on_host / probe_per_host 互补但不等价:
| 能力 | 面向对象 | 命令来源 |
|---|---|---|
base_module.probe_per_host / PreCheckBase.prefetch |
继承 PreCheckBase 的检查器 |
static_probes() 静态表 |
ProbeBatch |
任意执行通道(含不继承基类的工程,如本地 LocalExecutor) |
既有探测函数实际调用时记录,无需重写探测逻辑 |
故上移目标定为 precheck_module(与 build_probe_shell / parse_probe_output 同源,避免跨模块依赖)。
2. 目标¶
- 三份
utils/probe_batch.py副本删除,改由from precheck_module import ProbeBatch取用; - 三个子工程的 precheck / drift 结论与命令数收益与改造后完全一致(报告逐行不变);
- 共享库变更向后兼容——其余挂载工程无需改动。
3. 前置条件¶
~/py_public_modules已通过.pth挂入各工程 venv(python -c "import precheck_module"可通);- 三个子工程
.venv/bin/python可用; - 改动前先备份(见 §7)。
4. 影响范围¶
| 对象 | 改动 |
|---|---|
~/py_public_modules/precheck_module.py |
新增 ProbeBatch 类;typing 导入补 Callable / Iterable / Tuple。无既有符号改名或删除 |
eda_tools_ins/Synopsys/rocky9_eda_compat_20260928/deployer.py |
import 归并入既有 from precheck_module import ... 行 |
eda_tools_ins/Synopsys/synopsys_pdk_saed32_20260929/deployer.py |
同上 |
eda_tools_ins/Cadence/pdk_integration_20260927/deployer.py |
同上 |
三处 utils/probe_batch.py |
删除(副本另存入各工程 probe_batch_20261008/backup/<工程>/utils/ 作回归对照件) |
无需停服;不影响任何远端主机。
5. 分步操作¶
步骤 1:备份¶
TS=$(date +%Y%m%d-%H%M%S)
D=~/Documents/py_public_modules_changes/probe_batch_upstream_20261008
mkdir -p "$D/backup"
cp -a ~/py_public_modules/precheck_module.py "$D/backup/precheck_module.py.bak.$TS"
chmod 600 "$D/backup/precheck_module.py.bak.$TS"
预期:备份文件权限 600。失败判断:目录不可写 → 检查 $D 属主。
步骤 2:共享库新增 ProbeBatch¶
在 precheck_module.py 末尾追加 ProbeBatch 类(collect → prefetch → run 三方法)。要点:
run()复用文件内既有的私有_ProbeResult(属性集与CommandResult对齐),不另造结果类型;prefetch()每台拼一段 shell(build_probe_shell),主机间ThreadPoolExecutor并发,主机内串行;- 连接层失败(
exit_code == -1)时全部键记-1,与逐条探测语义一致; - 超时按记录到的各命令超时之和推导,钳制在
[120, 1800]秒。
坑:typing 导入若漏 Callable / Iterable / Tuple,collect 与 _cache 的类型注解会在导入期报 NameError。
步骤 3:三处 deployer 归并 import¶
# 每处:把 ProbeBatch 并入既有 precheck_module 导入行,并删除 utils.probe_batch 导入行
sed -i 's/^from precheck_module import has_block, render_report$/from precheck_module import ProbeBatch, has_block, render_report/' \
<工程根>/deployer.py
sed -i '/^from utils\.probe_batch import ProbeBatch$/d' <工程根>/deployer.py
预期:grep -n probe_batch <工程根>/deployer.py 无输出。
步骤 4:副本先入对照备份,再删除工作区副本¶
坑:probe_batch_20261008/backup/ 原先不含该文件(它是改造时新增、从未备份),若直接删工作区副本,回归自测装配「旧版」时会因缺件 ImportError。故必须先复制到 backup 再删。
B=<工程根>/probe_batch_20261008/backup/<工程名>/utils
mkdir -p "$B"
cp -a <工程根>/utils/probe_batch.py "$B/probe_batch.py"
rm <工程根>/utils/probe_batch.py
步骤 5:回归¶
见 §6。
6. 验证¶
| 项 | 命令 | 实测结果 |
|---|---|---|
| A/B 对照 | python3 /home/rain/Documents/eda_tools_ins/probe_batch_20261008/selftest.py |
4/4 通过:rocky9 precheck 18→3、drift 30→3;saed32 16→4;ic617 8→4;结果一致=True、命令数下降=True |
| import 冒烟 | 三工程 .venv/bin/python -c "import deployer, precheck_module; print(precheck_module.ProbeBatch.__module__)" |
三处均输出 precheck_module,hasattr(deployer,'ProbeBatch')=True |
| 副本清零 | find /home/rain/Documents/eda_tools_ins -name probe_batch.py -not -path '*/backup/*' \| wc -l |
0 |
| 共享库副作用 | 其余挂载工程 import precheck_module 冒烟 |
通过(新增类,无改名) |
7. 回滚¶
# 1) 恢复共享库
cp -a ~/Documents/py_public_modules_changes/probe_batch_upstream_20261008/backup/precheck_module.py.bak.<TS> \
~/py_public_modules/precheck_module.py
# 2) 恢复三处 deployer(备份见同目录 backup/eda/<工程>/deployer.py.bak.<TS>)
# 3) 恢复三份副本(从各工程 probe_batch_20261008/backup/<工程>/utils/probe_batch.py 复制回 utils/)
回滚后验证:python3 .../probe_batch_20261008/selftest.py 仍应 4/4 通过(旧版与新版的装配都在 backup 中)。
备份台账见 backup/README.md。
8. 风险说明¶
| 风险 | 缓解 |
|---|---|
| 误删副本致回归自测缺件 | 已在 SOP 步骤 4 固化为「先备份再删」,并写入步骤顺序 |
| 未预取的命令静默漏合并 | ProbeBatch.run 对未命中缓存回落逐条下发,语义与改造前一致 → 漏配只损失收益、不改结论 |
collect 两遍模式要求命令确定性 |
只适用于「命令由配置派生、不依赖前一条结果」的状态探测;变更类命令不走本模块 |
| 共享库被多工程共用 | 本次为纯新增(无改名/删除),向后兼容;已做多解释器 import 冒烟 |
来源:
/home/rain/Documents/py_public_modules_changes/probe_batch_upstream_20261008/SOP.md| 最后更新:2026-10-08 13:27(由build/sync.py同步,请勿在站点侧修改)