python pyd 速度提升_Cython提升Python效率

扩展知识视频教程

Python中算法和数据结构 - 国外课栈​viadean.com计算机视觉:Python OCR和对象检测快速入门​viadean.com从R迁移到Python以执行有效的数据分析 - 国外课栈​viadean.com

增强Python

对于大多数使用Python创建Web应用程序的开发人员而言,速度并不是那么重要。 只需添加更多服务器即可。 此外,使用诸如Django之类的框架创建应用程序所需的开发时间成本明显优于其竞争对手,因为您可以在使用其他语言或框架创建应用程序的五分之一时间内创建维护者 。但是,在其他应用程序中,例如在数值或其他稀有过程的分析中会发生什么呢?

如果我们使用Python分析数组,它的运行速度将非常慢。但是我们可以使用NumPy或Panda之类的库。

如果我们需要实时处理数据,现在会发生什么?亦或,我们急于因为公司的某个区域需要及时报告?

这就是Python可能不是正确的解决方案的地方。但是,有两种不错的选择:较旧的或较新的。比如,Cython和Numba。

Cython是一种编程语言,旨在成为Python编程语言的超集,旨在通过主要使用Python编写的代码提供可选的C启发式语法,从而提供类似C的性能。

Numba是一种开源JIT编译器,可使用LLVM将Python和NumPy的子集转换为快速的机器代码。它提供了一系列选项,用于并行化CPU和GPU的Python代码,通常只需进行少量代码更改即可。

例如,我将创建一个数组(1000 x 1000整数),将每一行的值相加,然后获得每一行中字符数的平均值。

Python代码:

非常简单,我们将某行的所有然后的值求和,得到数字的长度,然后得到所有行的平均值。

现在,将代码移植到Numba,我们得到了第一个问题:Numba中不存在“ sum”功能。 Numba有一些限制。而且您必须找到自己的解决方案。Numba的代码如下:

运行Numba的过程非常直接,仅添加代码,Numba库在运行时对其进行编译,然后由Python执行。

现在是Cython。首先,您必须创建一个setup.py文件,其中包含从源代码(.pyx文件)生成库的说明,然后,Python将被加载并运行。不用担心,并不复杂:

.pyx是经过修改的相同Python代码。 主要修改是添加您认为会更频繁使用的所有变量的数据类型。 在这种情况下,我还需要设置一个“虚拟数组”才能读取该数组。 代码最终是这样的:

我们如何知道必须优化的代码? Cython有一个称为“ cythonize”的工具。制作一个.html来显示慢行和快行。结果如下:

白线是不需要优化的线。 黄色最强的线最慢。 我们只需要担心最常调用的行是最白的行。 在这种情况下,循环是最常调用的,因此我们将数据类型放入其变量中,并避免类型之间的任何转换。

为了创建库,我运行命令:

python setup.py build_ext --inplace

它生成一个.pyd文件,Python可以将其作为普通Python库读取。

现在经过100次循环后的结果是:

< Python native >23.2303889< Numba >0.040989199999998505< Cython >0.037990799999999325

< Python native >23.2303889< Numba >0.040989199999998505< Cython >0.037990799999999325

< Python native >23.2303889< Numba >0.040989199999998505< Cython >0.037990799999999325

< Python native >23.2303889< Numba >0.040989199999998505< Cython >0.037990799999999325

< Python native >23.2303889< Numba >0.040989199999998505< Cython >0.037990799999999325

< Python native >23.2303889< Numba >0.040989199999998505< Cython >0.037990799999999325

在这种情况下,Python原生代码比Cython或Numba慢580倍。

Numba是最简单的Numba,您只需在代码的开头添加一些说明即可使用。但是它有局限性,每个版本都越来越少。

使用Cython,您可以感觉像是优化的王牌。 由于它有很多选择,因此消化起来要慢一些。 尽管您将花费最长时间,将数据类型添加到变量中并使用Cython版本的Python函数。 使用Cython,您还可以调用C函数。 局限性? 与所有编译的代码一样,它也是依赖于平台的,因此,例如,要在为Windows机器编译的Linux机器上运行Cython代码,则应同时创建两个版本的库。

Python速度提升示例

Python

Cython

保护Python源码

发布Python包

Cython用法详解

参阅Cython提升Python效率 - 国外课栈​viadean.com

你可能感兴趣的:(python,pyd,速度提升)