输出结不雅:
- Slots cost 3.12999987602
- NoSlots cost 3.48100018501
python C扩大
也许经由过程profile,我们已经找到了机能热点,但这个热点就是要运行大年夜量的计算,并且没法cache,没法省略。。。这个时刻就该python的C扩大出马了,C扩大就是把部分python代码用C或者C++从新实现,然后编译成动态链接库,供给接口给其它python代码调用。因为C说话的效力远远高于python代码,所以应用C扩大是异常广泛的做法,比如我们前面提到的cProfile就是基于_lsprof.so的一层封装。python的赶紧属对机能有请求的库都应用或者供给了C扩大,如gevent、protobuff、bson。
笔者曾经测试过纯python版本的bson和cbson的效力,在综合的情况下,cbson快了差不多10倍!
python的C扩崭荷饲一个异常复杂的问题,本文仅给出一些留意事项:
第一:留意引用计数的┞俘确治理
这是最难最复杂的一点。我们都知道python基于指针技巧来治理对象的生命周期,如不雅在扩大中引用计数出了问题,那么要么是法度榜样崩溃,要么是内存泄漏。更要命的是,引用计数导致的问题很难debug。。。
C扩大中关于引用计数最关键的三个词是:steal reference,borrowed reference,new reference。建议编写扩大代码之前细读python的官方文档。
第二:C扩大与多线程
这里的多线程是指在扩大中new出来的C说话线程,而不是python的多线程,出了python doc琅绫擎的介绍,也可以看看《python cookbook》的相干章节。
第三:C扩大应用处景
仅合适与营业代码的关系不那么慎密的逻辑,如不雅一段代码大年夜量营业相干的对象 属性的话,是很难C扩大的
将C扩大封装成python代码可调用的接口的过程称之为binding,Cpython本身就供给了一套原生的API,固然应用最为广泛,但该规范比较复杂。很多第三方库做了不合程度的封装,以便开辟者应用,比如boost.python、cython、ctypes、cffi(同时支撑pypy cpython),具体怎么应用可以google。
beyond CPython
尽管python的机能差能人意,然则其易学易用的特点照样博得越来越多的应用者,业界大年夜牛也大年夜来没有放弃对python的优化。这里的优化是对python说话设计上、或者实现上的一些反思或者加强。这些优化项目一些已经夭折,一些还在进一步改良中,在这个章节介绍今朝还不错的一些项目。
cython
前面提到cython可以用到binding c扩大,然则其感化远远不止这一点。
固然Cprofile的输出已经比较直不雅,但我们照样偏向于保存profile的结不雅,然后用图形化的对象来大年夜不呵9依υ?度来分析,或者比较优化前后的代码。查看profile结不雅的对象也比较多,比如,visualpytune、qcachegrind、runsnakerun,本文用visualpytune做分析。对于膳绫擎的代码,按照注释生成修改后从新运行生成test.prof文件,用visualpytune直接打开就可以了,如下:
Cython的重要目标是加快python的运行效力,然则又不像上一章节提到的C扩大那么复杂。在Cython中,写C扩大和写python代码的复杂度差不多(多亏了Pyrex)。Cython是python说话的超集,增长了对C说话函数调用和类型声明的支撑。大年夜这个角度来看,cython将动态的python代码转换成静态编译的C代码,这也是cython高效的原因。应用cython同C扩大一样,须要编译成动态链接库,在linux情况下既可以用敕令行,也可以用distutils。
如不雅想要体系进修cython,建议大年夜cython document入手,文档写得很好。下面经由过程一个简单的示例来展示cython的应用办法和机能(linux情况)。
起首,安装cython:
- pip install Cython
下面是测试用的python代码,可以看到这两个case都是运算复杂度比较高的例子:
- def f():
- return x**2-x
- def integrate_f(a, b, N):
- s = 0
- dx = (b-a)/N
推荐阅读
于IT业内,大年夜数据之火热程度,似乎无出其右者。当然,在颇┞锋正爆发前夕,也应当合时泼盆冷水。谁能接触到数据国内冠以大年夜数据之名的企业数以千计,但细分其专注范畴,大年夜致可>>>详细阅读
本文标题:Python性能优化
地址:http://www.17bianji.com/lsqh/36589.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示