梅小雨20190919-3效能分析
此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/7628
• 要求0 以 战争与和平 作为输入文件,重读向由文件系统读入。连续三次运行,给出每次消耗时间、CPU参数。
要求0 以《战争与和平》作为输入文件,重读向由文件系统读入。连续三次运行,给出每次消耗时间、CPU参数
测试方法:输入ptime wf -s < war_and_peace.txt
第一次测试时间截图:
第二次测试时间截图:
第三次测试时间截图:
统计表:
要求1 给出你猜测程序的瓶颈。你认为优化会有最佳效果,或者在上周在此处做过优化 (或考虑到优化,因此更差的代码没有写出) 。
瓶颈:字符转换过程中所用时间过多,可以通过函数封装的方法进行代码效率的优化
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
要求2 通过 profile 找出程序的瓶颈。给出程序运行中最花费时间的3个函数(或代码片断)。要求包括截图。 (5分)
要求 分析为什么此处是瓶颈。
要求 profile需要得到函数的运行时间和次数。仅得到CPU和内存占用,不得分。
输入python
-
m cProfile
-
s time wf.py
-
s < war_and_peace.txt
最耗费时间的3个函数:
要求3 根据瓶颈,"尽力而为"地优化程序性能。 (5分)
修改后的代码片段:
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个函数此时的花费。
此时三个函数的花费:
再测试三次:
要求5 程序运行时间。根据在教师的机器 (Windows8.1) 上运行的速度排名,分为3档。此题得分,第1档20分, 第2档10分,第3档5分。功能测试不能通过的,0分。
供老师测试的git地址为
https://e.coding.net/meixiaoyu/xn.git