20190919-3 效能分析

时间:2019-09-24
本文章向大家介绍20190919-3 效能分析,主要包括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:程序运行时间。

 待老师进行测试。

原文地址:https://www.cnblogs.com/wkf-/p/11563378.html