20190919-3 效能分析
作者:互联网
作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/7628。
代码地址:https://e.coding.net/wangkefei/word_frequency.git。
要求0:以 战争与和平 作为输入文件,重读向由文件系统读入。连续三次运行,给出每次消耗时间、CPU参数。
由于功能四未能完成,此作业在功能二的基础上进行效能分析。
第一次运行截图:
第二次运行截图:
第三次运行截图:
次数 | 时间(s) |
1 | 1.277 |
2 | 1.098 |
3 | 1.126 |
平均 | 1.167 |
CPU参数:Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz 3.40GHz
要求1:给出你猜测程序的瓶颈。
猜测:代码中除去文本中标点符号的操作耗时较长。上周使用re正则化模块,在字符串中查找特定的标点符号,由于符号种类较多,所以猜测此处费时。预计优化后可以将时间缩短至一秒以内。
上周代码片段:
words = re.split(r'[",", ".", "!", "?", ";", ""","--"]', lines) words = list(filter(None, words))
要求2:通过 profile 找出程序的瓶颈。给出程序运行中最花费时间的3个函数(或代码片断)。要求包括截图。
在命令行输入:
python -m cProfile -s cumulative wf.py war_and_peace.txt
该命令可以显示出程序中每个函数调用的次数以及运行时间,并按时间长短进行排序。
运行截图如下,红框中为耗时最长的三个函数:
要求3:根据瓶颈,"尽力而为"地优化程序性能。
重点:使用python的collection模块,及其提供的数据类型counter计数器用于计数。
修改代码部分:
text = collections.Counter(words) ret = text.most_common(10) max_len = 10 print('total', len(text), 'words') print(' ') formation = "{0:<%ds}{1:<6d}" % max_len for el in ret: print(formation.format(el[0], el[1]))
要求4:再次 profile,给出在 要求1 中的最花费时间的3个函数此时的花费。要求包括截图。
优化后三次ptime:成功将时间缩短到一秒之内。
次数 | 时间(s) |
1 |
0.747 |
2 | 0.762 |
3 | 0.761 |
平均 | 0.757 |
要求5:程序运行时间。
待老师进行测试。
标签:分析,截图,要求,效能,text,代码,时间,words,20190919 来源: https://www.cnblogs.com/wkf-/p/11563378.html