一、程序分析
(1)读文件到缓冲区
(2)处理缓冲区 ,统计每个单词的频率
(3)输出 Top 10 的单词
(4)设置一个main函数,将前面的函数进行调用封装
(5)具体性能分析
二、代码规范说明
(1)python3与python2在一些函数方面调用有区别:例如 python3在print函数的调用上是print(s),而python2在print函数的调用上是print“s”。
(2)python语言对空行有严格的限制,不像C语言有很多的大括号。
三、程序运行结果
(1)对文件Gone_with_the_wind的词频统计的结果:
(2)对文件A_Tale_of_Two_Cities的词频统计的结果:
四、性能分析结果及改进
(1)性能分析结果
1.1.寻找执行时间、次数最多的部分代码分析如下:
【参考博客:https://blog.csdn.net/asukasmallriver/article/details/74356771】
总的运行时间是0.95s。截图如下:
ncalls:表示函数调用的次数;
tottime:表示指定函数的总的运行时间,除掉函数中调用子函数的运行时间;
percall:(第一个percall)等于 tottime/ncalls;
cumtime:表示该函数及其所有子函数的调用运行的时间,即函数开始调用到返回的时间;
percall:(第二个percall)即函数运行一次的平均时间,等于 cumtime/ncalls;
filename:lineno(function):每个函数调用的具体信息;
1.2.每个函数具体占用时间截图如下:
我们看出在这几个函数当中,我们发现process_buffer函数运行的时间最长。
1.3.我们具体看一下process_buffer函数调用了什么
截图如下:
从分析结果的截图中我们可以看出process_buffer函数在lower上花费了巨大的时间。因此,我们下面将对此函数代码进行改进
(2)代码改进
接下来我们看一下总的运行时间是否进行了改变?
截图如下:
由此我们可以看出比之前运行减少了0.631s。
五、使用可视化分析
(1)graphviz安装和gprof2dot.py下载
【参考:http://www.graphviz.org/ 和 https://pypi.org/project/gprof2dot/#files】
(2)可视化操作
执行下述步骤:
1.性能分析:``` python -m cProfile -o result.out -s cumulative word_freq.py Gone_with_the_wind.txt``` ;分析结果保存到 result.out 文件;
2.转换为图形;gprof2dot 将 result.out 转换为 dot 格式;再由 graphvix 转换为 png 图形格式。 命令:```python gprof2dot.py -f pstats result.out | dot -Tpng -o result.png```
转换得到图如下: