一些 Python 代码加速工具!

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

当然这些并不能代替算法设计,但是还是能让 Python 加速很多倍。

其实前面讲算法的文章,也有提到过。比如适用于双向队列的 deque,以及在合适的条件下运用 bisect 和 heapq 来提升算法的性能。

而且前面也提到过,Python 提供了当今最高级也是最有效的排序算法(list.sort)。

另外还有一个功能多样又迅速的散列表(dict)。而且如果写迭代器封装、功能性代码或者是某种额外扩展的时候,或许CyToolz可以用得到。当然在itertools 和 functools 模块中,还有很多函数可以带来很高效的代码。

这篇文章主要讲优化单处理器的代码,下面会介绍一些一些高效的函数实现,也有已经封装好的拓展模块,还包括速度更快的 Python 解释器。

当然多处理器版本确实能大幅提高运行效率。如果想了解多核编程,可以从multiprocessing 模块开始。而且也能找到非常多的关于分布式计算的第三方工具。这里可以看一下 Python wiki 上的关于 Parallel Processing 的内容。

接下来,会说一些关于Python 加速工具的选单。

NumPy、SciPy、Sage 和 Pandas

先说 NumPy,它的核心是一个多维数字数组的实现。除了这个数据结构之外,还实现了若干个函数和运算符,可以高效地进行数组运算。并且对于被调用的次数进行了精简。它可以被用来进行极其高效的数学运算。

SciPy 和 Sage 都将 NumPy 内置为自身的一部分,同时内置了其他的不同的工具,从而可以用于特定科学、数学和高性能计算的模块。

Pandas 是一个侧重于数据分析的工具。如果处理大量半结构化数据的时候,可能也会用到 Pandas 相关的工具,比如 Blaze。

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 的实现,但不过还有很多地方不完善。

GPULib、PyStream、PyCUDA 和 PyOpenCL、

这四个都是用在图像处理单元来实现代码的加速。前面讲的都是用代码优化来实现加速的。而这些都是从硬件层面上进行加速,如果有一个强大的 GPU,我们可以用 GPU 来计算,从而减少 CPU 宝贵的资源。

PyStream 古老一点。GPULib 提供了基于 GPU 的各种形式的数据计算。

如果用 GPU 加速自己的代码,可以用 PyCUDA 和 PyOpenCL。

Pyrex、Cython、Numba 和 Shedskin、

这四个项目都致力于将 Python 代码翻译为 C、C++和 LLVM 的代码。Shedskin 会将代码编译为 C++语言。Pyrex、Cython 编译的主要目标是 C 语言。Cython 也是 Pyrex 的一个分支。

而且,Cython 还有 NumPy 数组的额外支持。

如果面向数组和数学计算的时候,Numba 是更好的选择导入时会自动生成相应的 LLVM 的代码。升级版本是 NumbaPro,还提供了对 GPU 的支持。

SWIG、F2PY、Boost.Python

这些工具可以将其他的语言封装为 Python 的模块。第一个可以封装 C/C++语言。F2PY 可以封装 Fortran。Boost.Python 可以封装 C++语言

SUIG 只要启动一个命令行工具,往里面输入 C 或者 C++的头文件,封装器代码就会自动生成。除了 Python,而且可以成为其他语言的封装器,比如 Java 和 PHP。

ctypes、llvm-py 和 CorePy2

这些模块可以帮助我们实现Python 底层对象的操作。ctypes 模块可以用于在内存中构建编译 C 的对象。并且调用共享库中的 C 的函数。不过 ctypes 已经包含在 Python 的标准库里面了。

llvm-py 主要提供LLVM 的 Python 接口。以便于构建代码,然后编译他们。也可以在 Python 中构建它的编译器。当然搞出自己编程语言也是可以的。
CorePy2 也可以进行加速,不过这个加速是运行在汇编层的。

Weave、Cinpy 和 PyInline

这三个包,就可以让我们在 Python 代码中直接使用 C 语言或者其他的高级语言。混合代码,依然可以保持整洁。可以使用 Python 代码的字符串的多行特性,可以使其他的代码按照自身的风格来进行排版。

其他工具

如果我们要节省内存,就不能使用 JIT 了。一般 JIT 都太耗费内存。有一句话说的很对,时间和内存经常不能兼得,而我们在工程开发中,总是要寻找他们的平衡点
至于其他的一些东西,比如 Micro Python 项目,这个是用在嵌入式设备或者微控制器上面使用的。

如果只是想在 Python 环境中工作,然后想用别的语言,可以看看这个项目Julia

- END -


感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python学习路线

image-20230619144606466

python学习路线图1
在这里插入图片描述

二、Python基础学习
1. 开发工具

2. 学习笔记

在这里插入图片描述

3. 学习视频

在这里插入图片描述

三、Python小白必备手册

图片

四、数据分析全套资源

在这里插入图片描述

五、Python面试集锦
1. 面试资料

在这里插入图片描述

在这里插入图片描述

2. 简历模板

在这里插入图片描述

因篇幅有限,仅展示部分资料,添加上方即可获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值