词频统计的效能测试。
因为我的词频统计程序是拿Python语言编写的,所以在网上查找了适用于Python语音的效能测试工具。
1.介绍性能分析器
profiler是一个程序,用来描述运行时的程序性能,并且从不同方面提供统计数据加以表述。Python中含有3个模块提供这样的功能,分别是cProfile, profile和pstats。这些分析器提供的是对Python程序的确定性分析。同时也提供一系列的报表生成工具,允许用户快速地检查分析结果。
Python标准库提供了3个不同的性能分析器:
- cProfile:推荐给大部分的用户,是C的一个扩展应用,因为其合理的运行开销,所以适合分析运行时间较长的。是基于lsprof。
- profile:一个纯python模块,它的接口和cProfile一致。在分析程序时,增加了很大的运行开销。如果你想扩展profiler的功能,可以试着继承这个模块。
- hotshot: 一个试验性的c模块,关注减少分析时的运行开销,但是是以需要更长的数据后处理的次数为代价。不过这个模块不再被维护,也有可能在新的python版本中被弃用。
具体所需模块的安装我方法我是参考这篇文章的《检测Python程序执行效率及内存和CPU使用的7种方法》
附网址:http://python.jobbole.com/80754/
2.性能测试
(1) 我对程序代码进行了修改,使得程序运行结束以后会显示出程序运行后所花费的时间。
(2)使用cProfile模块
知道每个函数和方法消耗了多少时间,以及这些函数被调用了多少次,可以使用cProfile模块。
现在可以看到代码中函数的详细描述,其中含有每个函数调用的次数,由于使用了-s选项(累加),最终结果会根据每个函数的累计执行时间排序。
会发现执行脚本所需的总时间比以前要多。这是由于测量每个函数的执行时间这个操作本身也是需要时间。
参数解释参考下图:
文章中提到运用memory_profiler模块用来基于逐行测量代码的内存使用,使用line_profiler模块可以给出执行每行代码所需占用的CPU时间。使用guppy包
可以知道在代码执行的每个阶段中,每种类型(str、tuple、dict等)分别创建了多少对象。
而我的电脑不知道出现什么原因,经过多次调试还是无法安装上以上模块,我正在查找解决问题的方法。
如安装line_profiler模块:
安装报错: