Этот код, который содержит Cython классы:очень медленные классы cython?
cdef class Bench:
cdef long n
def __cinit__(self, long n):
self.n = n
cpdef int factors(self):
n = self.n
cdef int fac = 0
cdef unsigned long i
for i in range(2, n):
if n % i == 0:
fac += 1
return fac
if __name__ == "__main__":
print "hw"
которую я назвал, как это после компиляции для расширения Python:
from time import time
t1 = time()
import factors_class
ben = factors_class.Bench(1000000007)
print ben.factors()
t2 = time()
print t2 - t1
и печатает 207.374788046 (в секундах)
но чистый Версия python (только с функцией и вызовом) работает в ~ 77s , а код cython без структуры классов работает в ~ 10,2s
класса менее версия в Cython:
cdef int factors(unsigned long n):
cdef int fac = 0
cdef unsigned long i
for i in range(2, n):
if n % i == 0:
fac += 1
return fac
print factors(1000000007)
if __name__ == "__main__":
print "hw"
Python версии:
def factors(n):
fac = 0
for i in xrange(2, n):
if n % i == 0:
fac += 1
return fac
print factors(10000007)
Я хочу использовать классы Cython для моей библиотеки, но, кажется, что они очень медленно по сравнению с функциональным программированием стиля в Cython , Очевидно, что что-то не так в моем коде класса cython. Как я могу улучшить свою скорость?
Суммируя результаты тестов:
Cython класс: 206S
Cython: 10.2s
Python: 77s
Сгенерированный C выглядит как ...? –