跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

Python cProfile 分析程序性能

cProfile是Python标准库中高效低开销的性能分析工具,推荐用于生产级瓶颈定位;可通过命令行(如python -m cProfile -s cumulative)或代码中手动启用(cProfile.Profile().enable()/disable())精准分析关键逻辑,并用pstats解析结果、排序筛选与聚焦调用关系。 Python 的
cProfile
是标准库中高效、低开销的性能分析工具,适合定位耗时函数和调用瓶颈,比纯 Python 实现的
profile
更快,也更推荐用于生产级分析。 如何快速启用 cProfile 最简单的方式是通过命令行直接运行:
python -m cProfile your_script.py
—— 输出所有函数调用的统计摘要
python -m cProfile -s cumulative your_script.py
—— 按累计时间(cumtime)排序,便于发现顶层慢函数
python -m cProfile -o profile_data.prof your_script.py
—— 将结果保存为二进制文件,供后续可视化或深入分析 在代码中手动控制 profiling 范围 避免分析整个启动过程(如 import 开销),可精准包裹关键逻辑段:
import cProfile import pstats

profiler = cProfile.Profile() profiler.enable()

? 只分析这段代码

result = heavy_computation(data)

立即学习“Python免费学习笔记(深入)”;

Python 3.14.3

微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。

下载

profiler.disable() profiler.dump_stats("analysis.prof")

直接打印排序后的结果(按内部时间)

stats = pstats.Stats("analysis.prof") stats.sort_stats("tottime") # 或 "cumtime", "ncalls" stats.print_stats(20) # 显示前 20 行

读懂关键指标含义 输出表格中常见列含义: ncalls :函数被调用次数(若含
/
,如
5/1
,表示递归调用共 5 次,实际进入 1 次) tottime :函数自身执行时间(不含子调用),单位秒 —— 优化首选目标 percall (对应 tottime):
tottime / ncalls
,单次调用平均耗时 cumtime :该函数及其所有子调用累计耗时 —— 判断“谁拖累了整体”的关键 filename:lineno(function) :精确定位到源码位置,方便立刻跳转修改 进阶技巧:过滤与聚焦 分析大型项目时,原始输出信息过载。可用
pstats
进行交互式筛选:
stats.filter_stats("numpy|pandas")
—— 只保留含关键词的函数
stats.strip_dirs().sort_stats("tottime").print_stats(10)
—— 去掉路径前缀,更清晰
stats.print_callers("your_function_name")
—— 查看谁调用了这个慢函数
stats.print_callees("some_module.some_func")
—— 查看它又调用了哪些函数 不复杂但容易忽略:cProfile 本身有轻微开销(通常 line_profiler 或
memory_profiler
使用。

相关文章