作家
登录

Python性能优化

作者: 来源: 2017-08-08 10:47:41 阅读 我要评论

字段的意义与文本输出根本一致,不过便捷性可以点击字段名排序。左下方列出了当前函数的calller(调用者),右下方是当前函数内部与子函数的时光┞芳用情况。上如是按照cumtime(即该函数内部及其子函数所占的时光和)排序的结不雅。

造成机能瓶颈的原因平日是高频调用的函数、单次消费异常高的函数、或者二者的结合。在我们前面的例子中,foo就属于高频调用的情况,bar属于单次消费异常高的情况,这都是我们须要优化的重点。

python-profiling-tools中介绍了qcachegrind和runsnakerun的应用办法,这两个colorful的对象比visualpytune强大年夜得多。具体的应用办法请参考原文,下图给出test.prof用qcachegrind打开的结不雅。

qcachegrind确切要比visualpytune强大年夜。大年夜上图可以看到,大年夜致分为三部:。第一部分同visualpytune类似,是每个函数占用的时光,个中Incl等同于cumtime, Self等同于tottime。第二部分和第三部分都有很多标签,不合的标签标示大年夜不合的角度来看结不雅,如图上所以,第三部分的“call graph”展示了该函数的call tree并包含每个子函数的时光百分比,一目了然。

profile针对优化

知道了热点,就可以进行针对性的优化,而这个优化往往根具体的营业密切相干,没用全能钥匙,具体问题,具体分析。小我经验而言,最有效的优化是找产品经理评论辩论需求,可能换一种方法也能知足需求,少者稍微调和一下产品经理也能接收。次之是修改代码的实现,比如之前应用了一个比较通俗易懂但效力较低的算法,如不雅这个算法成为了机能瓶颈,那就推敲换一种效力更高然则可能难解得的算法、或者应用dirty Flag模式。对于这些同样的办法,须要结合具体的案例,本文不做赘述。

接下来结合python说话特点,介绍一些让python代码不那么pythonic,但可以晋升机能的一些做法

第一:削减函数的调用层次

  1. cdef double f(double x): # 返回值也有类型断定 
  2.  
  3.     return x**2-x 
  4.  
  5.   
  6.  
  7. cdef double integrate_f(double a, double b, int N): 
  8.  
  9.     cdef int i 
  10.  
  11.     cdef double s, dx 
  12.  
  13.     s = 0 
  14.  
  15.     dx = (b-a)/N 
  16.  
  17.     for i in range(N): 
  18.  
  19.         s += f(a+i*dx) 
  20.  
  21.     return s * dx  

每一层函数调用都邑带来不小的开销,特别对于调用频率高,但单次消费较小的calltree,独裁的函数调用开销就很大年夜,这个时刻可以推敲将颇┞饭开。

对于之前调到的profile的代码,foo这个call tree异常简单,但频率高。修改代码,增长一个plain_foo()函数, 直接返回最终结不雅,关键输出如下:

跟之前的结不雅比较:

可以看到,优化了差不多3倍。

第二:优化属性查找

膳绫擎提到,python 的属性查找效力很低,如不雅在一段代码中频繁拜访一个属性(比如for轮回),那么可以推敲用局部变量代替对象的属性。

  1. call f cost: 1.19209289551e-06 
  2.  
  3. call integrate_f cost: 0.187038183212  

第三:封闭GC

在本文的第一章节已经提到,封闭GC可以晋升python的机能,GC带来的顿卡在及时性请求比较高的应用处景也是难以接收的。但封闭GC并不是一件轻易的工作。我们知道python的引用计数只能敷衍没有轮回引用的情况,有了轮回引用就须要靠GC来处理。在python说话中, 写出轮回引用异常轻易。比如:


  推荐阅读

  做大数据真的能赚钱吗?

于IT业内,大年夜数据之火热程度,似乎无出其右者。当然,在颇┞锋正爆发前夕,也应当合时泼盆冷水。谁能接触到数据国内冠以大年夜数据之名的企业数以千计,但细分其专注范畴,大年夜致可>>>详细阅读


本文标题:Python性能优化

地址:http://www.17bianji.com/lsqh/36589.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)