очень медленные классы 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 (только с функцией и вызов его )выполняется в ~77 с. и код cython без структуры классов работает в ~10.2s

class -меньше версия в 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

6
задан user5198 1 May 2012 в 07:10
поделиться