vscode中python代码本身不会导致内存泄漏,主因是ms-python.python和ms-python.pylance扩展在大型项目中全量加载类型信息、缓存失控及监听器未清理,致使extension host内存持续占用超500mb不回落;需通过清空标签页观察内存趋势、developer: open process explorer定位高内存extension host进程、精准配置files.watcherexclude(如"/node_modules/": true)和禁用autosearchpaths、限制extrapaths路径、关闭全量类型检查或换用pylsp来解决。

VSCode 里 Python 代码本身不会直接造成编辑器内存泄漏,真正吃内存的是 ms-python.python 和 ms-python.pylance 这两个扩展——它们在大型项目中默认全量加载类型信息、缓存失控、监听器没关干净,导致 Extension Host 进程卡在 600MB+ 不回落。
怎么看是不是 Python 扩展在泄漏,而不是你的代码
先排除干扰:清空所有标签页 → 等待 2–3 分钟 → 观察内存是否下降。如果没降,执行 Developer: Open Process Explorer,重点看 Extension Host 进程的 Memory 列。若它持续上涨或空载仍 > 500MB,问题大概率出在 Python 扩展,不是你写的 create_array()。
-
Developer: Reload Window后内存大幅回落?说明泄漏在当前会话上下文,是扩展未清理资源(比如没调dispose()) -
Developer: Reload Window后内存纹丝不动?必须杀掉旧 Extension Host 进程,否则禁用插件也无效 - 别信系统任务管理器的“Code Helper”进程——它混了渲染、GPU、扩展宿主,不准;只信
Process Explorer里的Extension Host
files.watcherExclude 配错等于没配,Python 项目必须加这四条
VSCode 的文件监听器(chokidar)一旦开始扫 node_modules 或 .git/objects,就会为每个小文件注册 inotify 句柄,Linux/macOS 上这类句柄不释放,内存线性涨且不可回收。
- 必须写在项目根目录的
.vscode/settings.json,写在用户级settings.json在多工作区下 100% 失效 - 规则必须带双星号和尾部斜杠:
"**/node_modules/**": true✅,"**/node_modules"❌(VSCode 直接忽略) - Python 项目至少要加:
"**/.venv/**": true、"**/venv/**": true、"**/__pycache__/**": true、"**/.git/**": true -
search.exclude是辅助项,只影响搜索结果,不减少监听压力——别拿它当files.watcherExclude用
python.analysis.extraPaths 和 autoSearchPaths 是内存爆表的真凶
python.analysis.extraPaths 让 Pylance 加载额外模块的 stubs 或源码,但若指向整个 venv/lib/python3.x/site-packages,它会强制解析成千上万个包,内存冲到 1.2GB+;而 python.analysis.autoSearchPaths 默认开启,会自动扫描 node_modules 下的 Python 文件(monorepo 里真会发生)。
- 禁用
python.analysis.autoSearchPaths:设为false,防止它乱扫非 Python 目录 -
python.analysis.extraPaths只填真正需要补全的路径,比如["./src"],别填["./venv"]或["."] -
typescript.tsserver.maxMemory对 Python 完全无效——这是 TypeScript 专用参数,混配只会掩盖真实瓶颈 - 大项目建议关掉全量类型检查:
"python.analysis.typeCheckingMode": "off",或换用轻量级的pylsp
Extension Host 卡住不动时,别 reload,要 kill
禁用 ms-python.python 后内存不降?不是插件没用,而是旧 Extension Host 进程还在跑,所有 AST 树、缓存、监听器全驻留内存。重载窗口(Reload Window)只重启渲染进程,不杀 Extension Host。
- 禁用插件后,必须关闭当前 VSCode 窗口,再重新打开
- 更彻底的做法:执行
Developer: Open Process Explorer→ 找到Extension Host对应的 PID → 终端执行kill -9 [PID](macOS/Linux)或在任务管理器里结束进程(Windows) - 再开新窗口,观察初始内存是否回归正常基线(通常 150–300MB)
- 如果还高,说明泄漏来自其他扩展(如
gitlens、vscode-drawio),得继续用 Heap Snapshot 对比Detached DOM和Closure
真正难搞的不是泄漏本身,而是多个扩展共用一个 Extension Host 进程——一个插件没 dispose,整个进程内存就锁死。local-process 模式能隔离,但目前仅限部分插件支持,多数还得靠手动 kill + 精准配置。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











