入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

飘逸的python - 性能调优利器profile及其意义

创建时间:2013-08-25 投稿人: 浏览次数:4944
VIM 的作者Bram Moolenaar在一篇叫高效文本编辑器的7个习惯的ppt中有这么一段话。 Three basic steps 1.    Detect inefficiency 2.    Find a quicker way 3.    Make it a habit 即 1.检测哪里效率低下 2.找到一种更快的方法 3.养成习惯   这3个步骤可谓是大道至简。放之四海而皆准。 不止适用于vim,一样适用于python以及其他语言,也适用于现实生活。 这简单的道理很多人都懂,但是却有很多人没有贯彻。 一遇到性能问题就胡乱猜测,毫无目的,无针对性。   性能问题也符合20/80规则。即20%的代码引起了80%的性能损耗。 可能有很多地方可以修修补补来优化,但是却是无关痛痒的性能提升,效果不明显,还经常把代码搞的一团糟。 感觉是不可靠的,要用数据说话。 通过profile可以快速定位到热点。针对热点来进行优化,往往能收到奇效。   python自带了profile模块。还自带用c语言写的cProfile。 使用很简单,在命令行中python -m cProfile xxx.py。 拿《飘逸的python - 打印螺旋矩阵》中的代码来分析。

其中ncalls是调用次数。 那么tottime 跟cumtime有什么区别呢。 cumtime即cumulative time,累积时间,包含子函数。这里说的子函数,就是在函数中调用其它的函数。 而tottime不包含子函数的时间。 从profile出来的结果可以看出,display_spiral()函数调用了2次,消耗了0.02秒,其它的加起来也就0.001秒,可见print输出很耗性能。   几种使用方法: 1.命令行中python -m cProfile xxx.py。 此方法方法只能对整个文件进行profile.   2.cProfile.run("statement") run方法的参数是python语句,比如可以是一条函数调用的语句。 import cProfile cProfile.run("display_spiral(4,4)")   3.enable/disable 此方法可以对某一部分代码进行profle. import cProfile p = cProfile.Profile() p.enable()#开始采集 display_spiral(4,4) display_spiral(5,4) p.disable()#结束采集 p.print_stats(sort="tottime")#打印结果

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像