У меня есть два небольших файла с именем LoopTest.pyx:
import time
t0= time.process_time()
class Loop():
def __init__(self, n0):
self.n0 = n0
def test(self):
cdef long long int a = 0
for i in range(self.n0):
a += i
self.a = a
self.t1 = time.process_time() - t0
print("Total is %f: and elapsed time is %f" %(self.a,self.t1))
и LoopTestPy.py следующим образом:
import time
t0= time.process_time()
class Loop():
def __init__(self, n0):
self.n0 = n0
def test(self):
a = 0
for i in range(self.n0):
a += i
self.a = a
self.t1 = time.process_time() - t0
print("Total is %f: and elapsed time is %f" %(self.a,self.t1))
Я создал файл setup.py следующим образом:
from distutils.core import setup
from Cython.Build import cythonize
setup(name='TestLoop',
ext_modules=cythonize("LoopTest.pyx"))
и построен с помощью python setup.py build_ext --inplace
.
при запуске следующего сценария тестирования:
from LoopTest import Loop
from LoopTestPy import Loop as PyLoop
n = 500000;
LPPy = PyLoop(n);
LP = Loop(n);
print('Python Loop:')
LPPy.test();
print('\n\nCython Loop:')
LP.test();
Я получаю следующие результаты:
Python Loop:
Total is 124999750000.000000: and elapsed time is 0.031250
Cython Loop:
Total is 124999750000.000000: and elapsed time is 0.046875
Похоже, Python l oop быстрее, чем Cython l oop ?! Что я делаю неправильно? Спасибо.