1. 使用 cProfile 进行初步性能分析
cProfile 是 Python 标准库中内置的性能分析模块,它能够统计程序中各个函数的调用次数、执行时间等信息。
1.1 基本使用方法
可以在命令行中直接运行:
python -m cProfile -o output.prof your_script.py
-o output.prof: 将分析结果保存到output.prof文件中。- 也可以不保存文件,直接在控制台输出统计信息。
或者,在代码中嵌入分析:
import cProfile
def main():
# 你的业务逻辑代码
...
if __name__ == '__main__':
profiler = cProfile.Profile()
profiler.enable()
main()
profiler.disable()
profiler.dump_stats('output.prof') # 保存结果
# 或者使用 profiler.print_stats() 直接打印到控制台
1.2 使用 pstats 分析 cProfile 结果
cProfile 生成的是二进制数据,需要使用 pstats 模块来查看和排序结果:
import pstats
stats = pstats.Stats('output.prof')
stats.strip_dirs() # 移除目录路径,使输出更简洁
stats.sort_stats('cumulative') # 按累计时间排序
stats.print_stats(20) # 打印前 20 个耗时最多的函数
常用的排序参数:
'cumulative': 累计时间(包括子函数调用)。'tottime': 函数自身耗时(不包括子函数调用)。'calls': 调用次数。'ncalls': 调用次数(区分递归)。'time': 内部时间(已弃用,建议用tottime)。
2. 理解 cProfile 输出的关键信息
pstats.print_stats() 的输出通常包含以下列:
ncalls tottime percall cumtime percall filename:lineno(function)
- : 该函数被调用的总次数。如果显示 ,表示 1 次递归调用导致了总共 2 次调用(1 次原始调用 + 1 次递归调用)。

