时间评估
timeit模块是为执行相对可靠的计时操作设计的。(Linux同样有timeit命令)
例如:
>>> import timeit
>>> timeit.timeit("x = sum(range(1000))")
13.79994061900004
如果想要使用命令行对某函数进行计时,可以使用-m
选项调用timeit模块。
$ python -m timeit -s "import mymodule as m" "m.myfunction()"
使用timeit模块需要避免因重复执行带来的副作用。例如对排序函数.sort()进行计时,可能只是首次运行执行了排序操作,而在其他次运行时,函数可能对已排序的结果不会执行排序操作,从而影响到对计算时间的评估。
性能评估与优化
实际过程中,我们经常猜测自己代码需要优化的是哪一部分,不如让profiler替我们找出来。cProfiler模块使用起来和timeit一样简单。如果我们的主函数是main(),我们可以像下面一样测试,打印程序中各个函数的计时结果。
import cProfiler
cProfiler.run("main()")
另外我们可以利用matplotlib将性能评估图形化,常用两类图形:
- 反映问题规模与运行时间关系的图表
- 运行时间的详细分布情况的盒形图(箱线图)
网友评论