以下是代码:
## x.py
#!/usr/bin/env python3
for i in range(9999):
for j in range(1, 9999):
pass
## x1.pyx
#!/usr/bin/env python3
# cdef double total = 0.0
# cdef int i, j
for i in range(9999):
for j in range(1, 9999):
pass
## setup.py
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules = cythonize("x1.pyx")
)
在shell中:
➜ /tmp python3 setup.py build_ext --inplace
➜ /tmp time python3 -c "import x1"
python3 -c "import x1" 2.86s user 0.01s system 99% cpu 2.875 total
➜ /tmp time ./x.py
./x.py 4.94s user 0.01s system 99% cpu 4.961 total
看起来cython即使不触及静态输入也能带来2倍的性能提升,它是如何做到的?这是否意味着它将普遍提高纯 python代码的性能?
答案 0 :(得分:4)
Cython将Python代码转换为实际的C语言,因此它可以在非常接近本机代码的级别运行。因此,使用普通Python代码的动态Python解释器的任何缺点都消失了。这样可以让Cython代码更快,特别是对于像你的示例所示的那些纯粹单独使用CPU的任务。