cython如何提高纯python代码的性能

时间:2014-12-08 02:42:24

标签: python cython

以下是代码:

## 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代码的性能?

1 个答案:

答案 0 :(得分:4)

Cython将Python代码转换为实际的C语言,因此它可以在非常接近本机代码的级别运行。因此,使用普通Python代码的动态Python解释器的任何缺点都消失了。这样可以让Cython代码更快,特别是对于像你的示例所示的那些纯粹单独使用CPU的任务。