这篇文章会提供一些优化代码的工具。会让代码变得更简洁,或者更迅速。
当然这些并不能代替算法设计,然而还是能让Python减速很多倍。
其实后面讲算法的文章,也有提到过。比方实用于双向队列的 deque,以及在适合的条件下使用 bisect 和 heapq 来晋升算法的性能。
而且后面也提到过,Python提供了当今最高级也是最无效的排序算法(list.sort)。
另外还有一个性能多样又迅速的散列表(dict)。而且如果写迭代器封装、功能性代码或者是某种额定扩大的时候,或者 CyToolz能够用失去。当然在itertools和 functools模块 中,还有很多函数能够带来很高效的代码。
这篇文章次要讲优化单处理器的代码,上面会介绍一些一些高效的函数实现,也有曾经封装好的拓展模块,还包含速度更快的Python解释器。
当然多处理器版本的确能大幅提高运行效率。如果想理解多核编程,能够从multiprocessing模块开始。而且也能找到十分多的对于分布式计算的第三方工具。这里能够看一下Python wiki上的对于Parallel Processing的内容。
接下来,会说一些对于Python减速工具的选单。
1.NumPy、SciPy、Sage和Pandas
先说,NumPy。它的外围是一个多维数字数组的实现。除了这个数据结构之外,还实现了若干个函数和运算符,能够高效地进行数组运算。并且对于被调用的次数进行了精简。它能够被用来进行极其高效的数学运算。
SciPy和Sage都将NumPy内置为本身的一部分,同时内置了其余的不同的工具,从而能够用于特定迷信、数学和高性能计算的模块。
Pandas是一个侧重于数据分析的工具。如果解决大量半结构化数据的时候,可能也会用到Pandas相干的工具,比方Blaze。
2.PyPy、Pyston、Parakeet、Psyco和Unladen Swallow
让代码运行的更快,侵入性最小的就是应用实时编译器(JIT编译)。以前的话咱们能够间接装置Psyco。装置之后导入psyco,而后调用psyco.full()。代码运行速度就能够显著晋升。运行Python代码的时候,它能够实时监控程序,会将一部分代码编译为了机器码。
当初好多Psyco等加速器的我的项目曾经进行保护了,不过相似的性能在PyPy中失去了继承。
PyPy为了不便剖析、优化和翻译,用Python语言将Python从新实现了一遍,这样就能够JIT编译。而且PyPy能够间接将代码翻译成像C那样的性能更高的语言。
Unladen Swallow是一个Python的JIT编译器。是Python解释器的一本版本,被称为底层虚拟机(LLVM)。不过这个开发曾经进行了。
Pyston是一个与LLVM平台较为靠近的Python的JIT编译器。很多时候曾经优于Python的实现,但不过还有很多中央不欠缺。
3.GPULib、PyStream、PyCUDA和PyOpenCL
这四个都是用在图像处理单元来实现代码的减速。后面讲的都是用代码优化来实现减速的。而这些都是从硬件层面上进行减速,如果有一个弱小的GPU,咱们能够用GPU来计算,从而缩小CPU贵重的资源。
PyStream古老一点。GPULib提供了基于GPU的各种模式的数据计算。
如果用GPU减速本人的代码,能够用PyCUDA和PyOpenCL。
4.Pyrex、Cython、Numba和Shedskin
这四个我的项目都致力于将Python代码翻译为C、C++和LLVM的代码。Shedskin会将代码编译为C++语言。Pyrex、Cython编译的次要指标是C语言。Cython也是Pyrex的一个分支。
而且,Cython还有NumPy数组的额定反对。
如果面向数组和数学计算的时候,Numba是更好的抉择导入时会主动生成相应的LLVM的代码。降级版本是NumbaPro,还提供了对GPU的反对。
5.SWIG、F2PY和Boost.Python
这些工具能够将其余的语言封装为Python的模块。第一个能够封装C/C++语言。F2PY能够封装Fortran。Boost.Python能够封装C++语言。
SUIG只有启动一个命令行工具,往里面输出C或者C++的头文件,封装器代码就会主动生成。除了Python,而且能够成为其余语言的封装器,比方Java和PHP。
6.ctypes、llvm-py和CorePy2
这些模块能够帮忙咱们实现Python底层对象的操作。ctypes模块能够用于在内存中构建编译C的对象。并且调用共享库中的C的函数。不过ctypes曾经蕴含在Python的规范库外面了。
llvm-py次要提供LLVM的Python接口。以便于构建代码,而后编译他们。也能够在Python中构建它的编译器。当然搞出本人编程语言也是能够的。
CorePy2也能够进行减速,不过这个减速是运行在汇编层的。
7.Weave、Cinpy和PyInline
这三个包,就能够让咱们在Python代码中间接应用C语言或者其余的高级语言。混合代码,仍然能够放弃整洁。能够应用Python代码的字符串的多行个性,能够使其余的代码依照本身的格调来进行排版。
8.其余工具
如果咱们要节俭内存,就不能应用JIT了。个别JIT都太消耗内存。有一句话说的很对,工夫和内存常常不能兼得,而咱们在工程开发中,总是要寻找他们的平衡点。
至于其余的一些货色,比方Micro Python我的项目,这个是用在嵌入式设施或者微控制器下面应用的。
如果只是想在Python环境中工作,而后想用别的语言,能够看看这个我的项目Julia。
以上就是本次分享的所有内容,想要理解更多 python 常识欢送返回公众号:Python 编程学习圈 ,发送 “J” 即可收费获取,每日干货分享