第三次作业——效能分析
此作业的要求参见:[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2145]
该作业git地址为:https://git.coding.net/qiaojingyu/wf_proFile.git
要求0:以 战争与和平 作为输入文件,重读向由文件系统读入。连续三次运行,给出每次消耗时间、CPU参数。
因为本次作业使用的是python语言,所以使用命令行输入以下代码:
python -m cProfile wf.py -s < war_and_peace.txt
得到的运行时间分别如下:
1.第一次运行:

2.第二次运行:

3.第三次运行:

|
次数 |
时间(s) |
|
1 |
0.614 |
|
2 |
0.636 |
|
3 |
0.622 |
|
平均 |
0.624 |
CPU参数: Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz 2.40GHz
要求1:要求1 给出你猜测程序的瓶颈。你认为优化会有最佳效果,或者在上周在此处做过优化。
(1)sorted()函数对词频进行排序时会比较耗时,所以上周已经进行优化。将读入的数据存入两个字典,分两部分排序,最后合并排序。
(2)猜测将读取的文件进行小写转换、字符转换后存入字典这一操作会耗时较长。但是上述操作在词频统计中是必须操作,猜想可以优化标点符号替换操作(将标点符号封装起来)。
# 单词格式化:去掉分词之后部分英文前后附带的标点符号
for word in y:
# last character of each word
word1 = word
# use a list of punctuation marks
while True:
lastchar = word1[-1:]
if lastchar in [",", ".", "!", "?", ";", '"',"-","*","%"]:
word2 = word1.rstrip(lastchar)
word1 = word2
else:
word2 = word1
break
while True:
firstchar = word2[0:]
if firstchar in [",", ".", "!", "?", ";", '"',"-","*","%"]:
word3 = word2.lstrip(firstchar)
word2 = word3
else:
word3 = word2
break
# build a wordList of lower case modified words
word_list2.append(word3)
#统计词频
tf = {}
for word in word_list2:
word = word.lower()
# print(word)
word = ''.join(word.split())
if word in tf:
tf[word] += 1
else:
tf[word] = 1
return tf
要求2:通过profile 找出程序的瓶颈。给出程序运行中最花费时间的3个函数或代码片段。
在命令行输入以下代码:
python -m cProfile -s time wf.py -s < war_and_peace.txt
该命令可以显示出程序中每个函数调用的次数以及运行时间,并对其按时间长短进行排序,看起来比较直观。
得到耗时前三名结果如下图红框内所示:

要求3:根据瓶颈,“尽力而为”地优化程序性能。
根据要求1中对程序瓶颈的猜想,优化后的代码如下所示:
while True:
lastchar = word1[-1:]
for lastchar in '\r .,"':
word2 = word1.rstrip(lastchar)
word1 = word2
else:
word2 = word1
break
while True:
firstchar = word2[0:]
for lastchar in '\r .,"':
word3 = word2.lstrip(firstchar)
word2 = word3
else:
word3 = word2
break
# build a wordList of lower case modified words
word_list2.append(word3)
要求4:再次profile,给出在要求1 中的最花费时间的3个函数此时的花费。
再次输入代码:
python -m cProfile -s time wf.py -s < war_and_peace.txt
得到结果如下图所示:
1.第一次运行:

2.第二次运行:

3.第三次运行:

|
次数 |
时间(s) |
|
1 |
0.587 |
|
2 |
0.589 |
|
3 |
0.582 |
|
平均 |
0.586 |
CPU参数: Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz 2.40GHz
对比可看出平均运行时间减少了0.038s。
要求5:程序运行时间。
等待教师测评。

浙公网安备 33010602011771号