feat(projectrans): 主进程 PROF 自动落盘 + 编译耗时统计 + 分析脚本升级
- Projectrans.py 入口包 cProfile,整次编译自动导出 main_prof_{pid}.prof 到 ./PROF;成功/失败均输出 [TIMING] 总耗时(stderr)并落盘 main_time.txt
- Config.py 新增 --asan(透传 TPC_ASAN=1)+ 每次编译自动清理 PROF 目录 *.prof
- PROF/1.py 升级为综合报告(tottime/cumtime top + callers 定位 + 模块聚合 + 上次编译耗时)
This commit is contained in:
1 parent
bdc5ec3e88
commit
1808e90fd3
3 files changed
+205
-1
No files matched your search
+33
-1
@@ -21,4 +21,36 @@ __all__ = [
|
||||
]
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
# 主进程性能剖析:整次编译过程(Phase1 声明生成 + Phase2 翻译/编译/链接)
|
||||
# 自动导出 cProfile dump 到 ./PROF/main_prof_{pid}.prof(与 worker 子进程
|
||||
# worker_prof_*.prof 同目录,可用 PROF/1.py 合并分析)。主进程 profile 主要
|
||||
# 覆盖 Phase1/依赖扫描/编译调度/链接等主进程侧耗时;worker 内部 CPU 分布
|
||||
# 仍由 _ProfileWorker 的 worker_prof_*.prof 覆盖(多进程下主进程 cProfile
|
||||
# 看不到子进程内部热点,两者互补)。
|
||||
import cProfile as _cProfile
|
||||
import os as _os
|
||||
import sys as _sys
|
||||
import time as _time
|
||||
from lib.Projectrans.Phase2Translator import PROF_DIR as _PROF_DIR
|
||||
|
||||
_main_prof: _cProfile.Profile = _cProfile.Profile()
|
||||
_main_prof.enable()
|
||||
_start_ts: float = _time.perf_counter()
|
||||
try:
|
||||
main()
|
||||
_timing_status: str = '成功'
|
||||
except BaseException:
|
||||
_timing_status = '失败'
|
||||
raise
|
||||
finally:
|
||||
_main_prof.disable()
|
||||
_elapsed_s: float = _time.perf_counter() - _start_ts
|
||||
_timing_msg: str = f'[TIMING] 编译{_timing_status},总耗时 {_elapsed_s:.2f}s'
|
||||
print(_timing_msg, file=_sys.stderr)
|
||||
try:
|
||||
_os.makedirs(_PROF_DIR, exist_ok=True)
|
||||
_main_prof.dump_stats(_os.path.join(_PROF_DIR, f'main_prof_{_os.getpid()}.prof'))
|
||||
with open(_os.path.join(_PROF_DIR, 'main_time.txt'), 'w', encoding='utf-8') as _tf:
|
||||
_tf.write(f'{_timing_status}\t{_elapsed_s:.2f}\n')
|
||||
except Exception:
|
||||
pass
|
||||
Reference in new issue
Block a user