一点号复旦大数据昨天
总会遇到一个时候你会想提高程序执行效率,想看看哪部分耗时长成为瓶颈,想知道程序运行时内存和CPU使用情况。这时候你会需要一些方法对程序进行性能分析和调优。
By Context Manager可以上下文管理器自己实现一个计时器, 参见之前的介绍 timeit 文章里做的那样,通过定义类的 __enter__ 和 __exit__ 方法来实现对管理的函数计时, 类似如:
使用方式如下:
By Decorator
然而我认为装饰器的方式更加优雅
上面的结果说明: 执行脚本消耗0.79sCPU时间, 0.18秒执行内核函数消耗的时间,总共0.977s时间。
其中, total时间 - (user时间 + system时间) = 消耗在输入输出和系统执行其它任务消耗的时间
直接看带注释的使用示例吧。
cProfile将分析的结果保存到result.out文件中,但是以二进制形式存储的,想直接查看的话用提供的 pstats 来查看。
cProfile还提供了可以自定义的类,可以更精细的分析, 具体看文档。
格式如: class profile.Profile(timer=None, timeunit=0.0, subcalls=True, builtins=True)
下面这个例子来自官方文档:
line_profiler是一个对函数进行逐行性能分析的工具,可以参见github项目说明,地址: https://github.com/rkern/line_profiler
示例
通过 kernprof 命令来注入分析,运行结果如下:
hits(执行次数) 和 time(耗时) 值高的地方是有比较大优化空间的地方。
类似于”line_profiler“对基于行分析程序内存使用情况的模块。github 地址:https://github.com/fabianp/memory_profiler 。ps:安装 psutil, 会分析的更快。
同样是上面”lineprofiler“中的代码,运行 python -m memory_profiler profile.py 命令生成结果如下:
回复下列数字即可获得相应干货下载:
1:一百多篇大数据文档下载!
2:超全数据分析资料免费下载!(包括SQL,R语言,SPSS,SAS,python,数据分析和数据挖掘)
3:清华大学数据科学院讲座内容集锦免费下载!
4:20G!超全数据分析 视频 教程免费下载!(包括R语言,SPSS,统计学基础,excel,数据挖掘,医学统计)
5:Python超全资料分享!