如何优化这个cython代码?我发现速度只增加了3%

时间:2017-04-11 14:32:28

标签: python python-3.x cython cythonize

这是我的fun.pyx文件

cimport cython

@cython.boundscheck(False)
cdef long long int extr():
    cdef long long int i=0;
    while i<=20000000000:
        i=i+1
    return i

def fn():
    return extr()

这是我的test.py文件

from fun import fn
import time

t1=time.time()
print(fn())
print(time.time()-t1)

但是在运行之后,我发现与python程序相比,速度只提高了3%。如何优化这个程序? 任何建议都会有所帮助。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

我运行了以下基准测试并找到了适当的加速

cimport cython
from cython.operator cimport preincrement as inc
@cython.boundscheck(False)
cpdef long long int extr():
    cdef long long int i=0;
    while i<=200000:
        inc(i)
    return i

Python函数

def pextr():
    i=0;
    while i<=200000:
        i +=1
    return i

现在进行基准测试:

%timeit extr()


The slowest run took 16.55 times longer than the fastest. This could mean that an intermediate result is being cached.
10000000 loops, best of 3: 67.2 ns per loop




%timeit pextr()


100 loops, best of 3: 15.6 ms per loop
In [3]:

你是否正确构建了这个?您将需要使用pyximport或具有适当的setup.py脚本

我还注意到你正在使用fn来执行这段代码,可能是因为你已经意识到不可能将cdef导入到python文件中。但是,如果您只是将函数保存为cpdef,则可以直接使用它