0

这是我的 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%。如何优化这个程序?任何建议都会有所帮助。提前致谢。

4

1 回答 1

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,则可以直接使用它

于 2017-04-11T14:52:06.147 回答