本文目录导读:

是的,cProfile 是 Python 标准库中推荐的性能分析工具,适用于绝大多数场景。
为什么推荐 cProfile
- 内置模块:无需额外安装
- 开销较小:相比
profile(纯 Python 实现),cProfile是 C 扩展实现,对程序性能影响更小 - 功能完整:能统计函数调用次数、总耗时、累积耗时等
基本用法
命令行直接运行
python -m cProfile my_script.py
在代码中启用
import cProfile
def main():
# 你的代码
pass
if __name__ == '__main__':
cProfile.run('main()', sort='cumtime') # 按累积时间排序
保存结果到文件(最常用)
import cProfile
import pstats
# 运行分析并保存
cProfile.run('main()', 'output.prof')
# 读取并分析结果
p = pstats.Stats('output.prof')
p.sort_stats('cumtime').print_stats(20) # 显示前20行
常用排序方式
p.sort_stats('time') # 按内部耗时排序
p.sort_stats('cumtime') # 按累积耗时排序(推荐)
p.sort_stats('calls') # 按调用次数排序
p.sort_stats('ncalls') # 同上
可视化分析(进阶)
配合 snakeviz 生成火焰图:
# 安装 pip install snakeviz # 生成 .prof 文件后再执行 snakeviz output.prof
这样会在浏览器中打开交互式图表,更容易定位性能瓶颈。
什么时候不用 cProfile
- 极短时间的代码(<0.1秒):
cProfile本身的开销可能影响结果 - 需要行级精度:改用
line_profiler - 内存分析:改用
memory_profiler
简单示例
import cProfile
def slow_function():
total = 0
for i in range(10**6):
total += i
return total
def fast_function():
return sum(range(10**6))
if __name__ == '__main__':
cProfile.run('slow_function()')
cProfile.run('fast_function()')
对于大多数 Python 性能分析需求,cProfile + pstats + snakeviz 是标准且高效的方案。