Este código, que contiene clases Cython:clases muy lentas de 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"
que he llamado así después de compilar a una extensión de Python:
from time import time
t1 = time()
import factors_class
ben = factors_class.Bench(1000000007)
print ben.factors()
t2 = time()
print t2 - t1
y se imprime 207.374788046 (segundos)
pero la pura La versión de Python (con solo la función y una llamada) se ejecuta en ~ 77s y un código de cython sin estructura de clase se ejecuta en ~ 10.2s
versión de la clase, menos en 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 versión:
def factors(n):
fac = 0
for i in xrange(2, n):
if n % i == 0:
fac += 1
return fac
print factors(10000007)
Quiero usar clases Cython para mi biblioteca, pero, que parecen ser muy lento en comparación con el estilo de programación funcional en Cython . Claramente, algo está mal en mi código de clase cython. ¿Cómo puedo mejorar su velocidad?
Para resumir los resultados de referencia:
clase Cython: 206S
Cython: 10.2s
pitón: 77s
¿La C generada parece ...? –