Jupyter/Spyder运行Python代码远快于Windows Shell的原因及解决办法
问题原因
- 环境不一致:Spyder/Jupyter默认使用的Python环境可能包含经过优化的依赖库(如带Intel MKL加速的pandas),而PowerShell调用的系统Python或其他环境缺少这些优化,导致计算效率差异。
- 控制台IO阻塞:如果代码中有大量
print输出,PowerShell的控制台渲染速度远慢于Spyder的内置终端,频繁的IO操作会拖慢整个程序运行。 - 进程优先级差异:Spyder启动的Python进程默认优先级更高,系统会分配更多CPU、内存资源;而PowerShell启动的进程优先级较低,资源分配不足。
- 代码遍历效率问题:多次遍历大表的循环操作在不同环境下的执行效率差异被放大,非向量化的Python循环在未优化的环境中性能劣势更明显。
解决办法
- 统一Python环境:
- 在Spyder中执行
import sys; print(sys.executable)获取当前使用的Python路径 - 在PowerShell中直接调用该路径的解释器,例如:
"C:\Users\XXX\anaconda3\envs\myenv\python.exe" "C:\folders\xy.py"
- 在Spyder中执行
- 禁用控制台输出:
注释掉代码中所有非必要的print语句,或改用logging模块将日志写入文件,避免控制台IO阻塞。 - 提升进程优先级:
使用start /high命令启动Python,强制提升进程优先级:start /high python "C:\folders\xy.py" - 优化代码性能:
- 用pandas的向量化操作替代循环遍历,比如用
merge或map实现标签匹配,避免逐行循环 - 读取CSV时指定
dtype参数减少内存占用,例如pd.read_csv("data.csv", dtype={"col1": str, "col2": int}),同时添加low_memory=False避免类型推断开销 - 将过滤表转换为字典或集合,加快标签匹配的查找速度
- 用pandas的向量化操作替代循环遍历,比如用
- 启用解释器优化:
启动Python时添加-O参数启用优化模式:python -O "C:\folders\xy.py"
内容的提问来源于stack exchange,提问作者Balázs Cselyuszka
相关产品推荐
相关产品推荐

