Files
TransPyC/Projectrans.py
T
2026-09-09 14:46:41 +08:00

57 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""ProjectTrans.py - 工程级 TransPyC 翻译器"""
import lib._bootstrap # noqa: F401 设置 sys.path(项目根 + lib/includes)
from lib.Projectrans import (
compute_sha1, _check_annotation_for_export, sha1_file,
get_file_dependencies, find_reachable_files_from_entries,
topological_sort_files, Phase1Generator, DeclarationGenerator,
Phase2Translator, _parallel_translate_worker,
save_sha1_map, Load_sha1_map, get_sha1_map_store, clear_sha1_map_store,
Load_project_config, resolve_paths, main
)
__all__ = [
'compute_sha1', '_check_annotation_for_export', 'sha1_file',
'get_file_dependencies', 'find_reachable_files_from_entries',
'topological_sort_files', 'Phase1Generator', 'DeclarationGenerator',
'Phase2Translator', '_parallel_translate_worker',
'save_sha1_map', 'Load_sha1_map', 'get_sha1_map_store', 'clear_sha1_map_store',
'Load_project_config', 'resolve_paths', 'main'
]
if __name__ == '__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