作家
登录

Python性能优化

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

运行结不雅:

  1. call f cost: 0.0874309539795 
  2.  
  3. call integrate_f cost: 2.92381191254  

机能晋升了大年夜概两倍,我们再来尝尝cython供给的静态类型(static typing),修改cython_example.pyx的核心代码,调换f()和integrate_f()的实现如下:

  1. def f(double x): # 参数静态类型 
  2.  
  3.     return x**2-x 
  4.  
  5.   
  6.  
  7. def 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  

然后从新运行膳绫擎的第三 四步:结不雅如下

  1. call f cost: 0.042387008667 
  2.  
  3. call integrate_f cost: 0.958620071411  

膳绫擎的代码,只是对参数惹人了静态类型断定,下面对返回值也惹人静态类型断定。

调换f()和integrate_f()的实现如下:

然后从新运行膳绫擎的第三 四步:结不雅如下

filename:lineno(function) 文件:行号(函数)

Amazing!

references

  • 编程说话benchmark
  • python属性查找
  • python profiler
  • yappi
  • greenletprofiler
  • python-profiling-tools
  • python C API
  • cython
  • Pyrex
  • cython document
  • pypy 

pypy

下面给出一段编造的”效力低下“的代码,并应用Cprofile来解释profile的具体办法以及我们可能碰到的机能瓶颈。

pypy是CPython的一个替代实现,其最重要的优势就是pypy的速度,下面是官网的测试结不雅:

在实际项目中测试,pypy大年夜概比cpython要快3到5倍!pypy的机能晋升来自JIT Compiler。在前文提到google的Unladen Swallow 项目也是想在CPython中惹人JIT,在这个项目掉败后,很多开辟人员都开端参加pypy的开辟和优化。别的pypy占用的内存更少,并且支撑stackless,根本等同于协程。

pypy的缺点在于对C扩大方面支撑的不太好,须要应用CFFi来做binding。对于应用广泛的library来说,一般都邑支撑pypy,然则小众的、或者自行开辟的C扩大就须要从新封装了。

固然应用python的编程人员都应当接收其运行效力低的事实,但python在越多越来的范畴都有广泛应用,比如科学计算 、web办事器等。法度榜样员当然也欲望python可以或许运算得更快,欲望python可以更强大年夜。

ChangeLog

【编辑推荐】

  1. Python Decorator基本
  2. Python Yield Generator详解
  3. Python中的异步编程:Asyncio
  4. GAFT:一个应用Python实现的遗传算法框架
  5. 法度榜样员必知的Python陷阱与缺点列表
【义务编辑:枯木 TEL:(010)68476606】

  推荐阅读

  做大数据真的能赚钱吗?

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


本文标题:Python性能优化

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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