关于python:一份可以令-Python-变快的工具清单

31次阅读

共计 2365 个字符,预计需要花费 6 分钟才能阅读完成。

这篇文章会提供一些优化代码的工具。会让代码变得更简洁,或者更迅速。

当然这些并不能代替算法设计,然而还是能让 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”即可收费获取,每日干货分享

正文完
 0