Ten kod, który zawiera Cython klasy:bardzo wolne klasy cytonowe?
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"
który nazwałem tak po kompilacji do rozszerzenia Pythona:
from time import time
t1 = time()
import factors_class
ben = factors_class.Bench(1000000007)
print ben.factors()
t2 = time()
print t2 - t1
i wypisuje 207.374788046 (w sekundach)
ale czysty wersja python (z samą funkcją i wywołaniem) działa w ~ 77s , a kod cythonowy bez struktury klas działa w ~ 10,2 s.
klasy mniejsza wersja 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 version:
def factors(n):
fac = 0
for i in xrange(2, n):
if n % i == 0:
fac += 1
return fac
print factors(10000007)
Chcę użyć klasy Cython do mojej biblioteki, ale wydają się być bardzo powolny w porównaniu do programowania funkcjonalnego stylu w Cython . Najwyraźniej coś jest nie tak w moim kodzie cytonowym. Jak mogę poprawić jego prędkość?
Podsumowując wyniki testów:
klasy Cython: 206s
Cython: 10.2s
pyton: 77s
Wygenerowany C wygląda jak ...? –