cProfile与timeit代码性能分析工具详解
请介绍Python性能分析工具cProfile和timeit的用法,解释如何通过分析结果优化代码性能。
回答
小字辈
cProfile:内置的性能分析器,记录函数调用次数和执行时间。
python -m cProfile -o output.prof my_script.py
# 或代码中使用
import cProfile
cProfile.run('my_func()', 'output.prof')
# 可视化分析
import pstats
p = pstats.Stats('output.prof')
p.sort_stats('cumtime').print_stats(10) # 按累积时间排序
关键指标:ncalls(调用次数)、tottime(总耗时,不含子函数)、cumtime(累积耗时,含子函数)。可视化推荐snakeviz或py-spy。
timeit:精确测量小段代码执行时间。
import timeit
# 命令行
python -m timeit -n 1000 -r 5 'sum(range(100))'
# 代码中
time = timeit.timeit('sum(range(100))', number=10000)
timeit.repeat('sum(range(100))', repeat=5, number=10000)
自动多次执行取最小值,规避系统负载干扰。repeat()返回多次测试的列表。
优化流程:先cProfile定位热点→timeit验证优化方案→迭代优化。