这是我的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%。如何优化这个程序? 任何建议都会有所帮助。 提前谢谢。
答案 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,则可以直接使用它