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
- ES6 主要的新特性
- thinkphp生成的验证码不显示问题解决
- 深入剖析Spring(二)——IoC容器的实现
- JDBC上关于数据库中多表操作一对多关系和多对多关系的实现方法
- 深入剖析Spring(一)——IoC的基本概念(从面向对象角度介绍)
- Restful安全认证及权限的解决方案
- Java并发容器大合集
- Java并发编程的艺术(九)——批量获取多条线程的执行结果
- web.xml中load-on-startup的作用
- Java并发编程的艺术(七)——Executors
- Java并发编程的艺术(八)——闭锁、同步屏障、信号量详解
- PowerDesigner使用教程|使用方法
- Java并发编程的艺术(一)——并发编程需要注意的问题
- 梯度下降法快速教程 | 第三章:学习率衰减因子(decay)的原理与Python实现
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 人生苦短,何不用vim装13
- Saltstack_使用指南09_远程执行-编写执行模块
- 如何安装FreeIPA
- 编译及使用hive-testbench生成Hive基准测试数据
- 树酱的前端知识体系构建(下)
- Babel配置傻傻看不懂?
- Saltstack_使用指南10_配置管理-状态模块
- Saltstack_使用指南11_配置管理-状态之间依赖关系 4.1. 部署架构4.2. Apache和PHP的SLS【正向依赖】4.3. mariadb 的 SLS
- 前端工程化之CICD那点破事
- Saltstack_使用指南12_配置管理-jinja模板 4.1. 部署架构4.2. 本章涉及的 pillar 的信息4.3. 配置文件 httpd.conf 修改
- Saltstack_使用指南13_runner的job和manage与execution的saltutil 5.1. master执行5.2. 查看当前活动的jobs
- Saltstack_使用指南14_无master 3.1. 常规信息3.2. grains设置3.3. pillar设置
- 在CDH7.1.1中安装NiFi
- 重学前端(三)-聊聊我们的浏览器的那些事
- Saltstack_使用指南15_多master 3.1. 创建冗余的master3.2. 拷贝主master的key和配置到冗余的master3.3. 启动冗余ma