PyPyNumba 与 Cython,哪个是最佳 Python运算解决方案?

Posted 黑马程序员官方

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PyPyNumba 与 Cython,哪个是最佳 Python运算解决方案?相关的知识,希望对你有一定的参考价值。

正如Python之父说:“大部分觉得Python慢的应用都是没有正确地使用Python。”

由于Python由于要在运行时编译和解释执行字节码,而且这个过程中参与了很多类似运行时类型检查的操作等一系列其他操作,从而产生了很多额外开销,降低了性能。

为了让这门语言变得完美,PyPy、Numba 、Cython解决方案应用而生。

PyPy

PyPy是用RPython(CPython的子集)实现的Python,根据官网的基准测试数据,它比CPython实现的Python要快6倍以上。快的原因是使用了Just-in-Time(JIT)编译器,即动态编译器,与静态编译器(如gcc,javac等)不同,它是利用程序运行的过程的数据进行优化。

适用场景:PyPy最适合纯Python应用程序,不适用于C扩展

Numba

Numba 是 python 的即时(Just-in-time)编译器,即当您调用 python 函数时,您的全部或部分代码就会被转换为“即时”执行的机器码,它将以您的本地机器码速度运行。

python 代码的编译过程包括四个阶段:词法分析 -> 语法分析 -> 生成字节码 -> 将字节码解释为机器码执行, 常见的 python 解释器的类型有 cpython、IPython、PyPy、Jython、IronPython,与其他解释器不同,numba 是使用 LLVM 编译技术来解释字节码的

代码编译方式

适用场景:使用numpy数组做大量科学计算时、使用for循环时

Cython

与Numba不同,所有的Cython代码应该在专门文件中与常规Python代码分开。Cython将这些文件解析并转换成C代码,然后使用提供的C编译器 (例如,gcc)编译它。

编写快速Cython代码需要理解C和Python内部结构。如果你熟悉C,你的Cython代码可以运行得和C代码一样快。

适用场景:优化Python脚本性能或Python调用C函数库

总结:

以上三种方法都有各自最适合的使用场景,也有相对的局限性,没法说谁最是优秀的运算解决方案,大家可以根据不同场景选择使用。

以上是关于PyPyNumba 与 Cython,哪个是最佳 Python运算解决方案?的主要内容,如果未能解决你的问题,请参考以下文章

cython与python的不同都有哪些

如何在 cython 中调用此函数?

Cython C++ 和 std::string

在 cython 中处理默认参数

在 Cython 中包装自定义类型 C++ 指针

cython wrap cpp 结构和函数,参数为结构数组