可能获得哪种类型的速度提升
编译后趋于更快运行的 Python 代码有可 能是数学方面的,并且可能有许多循环在重复着多次相同的运算。在这些循环中, 有可能会生成许多临时对象。
只有当被编译的代码主要是 Python(并且可能主要是循 环)时才会运行得更快
JIT 和 AOT 编译器(translater)的对比
-
提前编译(AOT), 你会创建一个为你的机器定制的静态库。如果你下载了 numpy、scipy 或 scikit-learn,它就会在你的机器上用 Cython 编译部分的 库(或者如果你正在使用像 Continuum’s Anaconda 之类的分发包,你就会使用一个 事先构建的预编译库)。通过在使用之前编译的方式,你就会获得一个能够在工作 中立即拿来使用来解决你的问题的库。
-
即时编译 冷启动:通过即时编译,你不必提前做很多(如果有的话),你让编译器在使用时只逐步编 译恰到好处的那部分代码。如果你的大部分 代码能够被编译并且当前都还没有被编译过,当你开始运行代码而且正在被编译 时,就会跑得很慢。如果这事在你每次运行脚本时都发生,并且你运行这脚本很多 次,开销就会变得很显著。
Cython
In pyx
1 |
|
导入pyx
1 |
|