diff --git a/lib/Projectrans/Phase2Translator.py b/lib/Projectrans/Phase2Translator.py index fd98003..c054ce9 100644 --- a/lib/Projectrans/Phase2Translator.py +++ b/lib/Projectrans/Phase2Translator.py @@ -37,12 +37,17 @@ def _CachedIsFile(path: str) -> bool: return r -def _PickWorkerCount(n_files: int, per_worker_mb: int = 700) -> int: +def _PickWorkerCount(n_files: int, per_worker_mb: int = 350) -> int: """按可用物理内存动态限制并行 worker 数,避免多进程编译内存峰值 OOM。 单 worker 预估 per_worker_mb(Python 解释器 + llvmlite module + 共享 符号表快照);系统可用内存不足时降为单 worker 串行,内存充足时回落到 cpu_count 并行。Windows 用 GlobalMemoryStatusEx 读 ullAvailPhys。 + + per_worker_mb=350(2026-08-22 从 700 调低):实测翻译阶段 worker 稳态 + 内存 ~110MB(tasklist 观察)、峰值 ~300MB;原 700MB 过保守——可用内存 + 稍紧(<2.8GB)就整体降级单 worker 串行,76 文件逐个翻译 1180s,并行 + 时 ~400s,时间波动 2-3 倍(用户反馈"编译时间不稳定"的根因之一)。 """ base = min(os.cpu_count() or 4, n_files) if base <= 1: