Mã này chứa các lớp cython:các lớp cython rất chậm?
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"
mà tôi gọi là như thế này sau khi biên dịch để một phần mở rộng python:
from time import time
t1 = time()
import factors_class
ben = factors_class.Bench(1000000007)
print ben.factors()
t2 = time()
print t2 - t1
và nó in ra 207,374788046 (Giây)
nhưng tinh khiết Phiên bản python (chỉ với chức năng và cuộc gọi đến nó) chạy trong ~ 77s và mã cython không có cấu trúc lớp chạy trong ~ 10.2s
đẳng cấp ít phiên bản trong 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 phiên bản:
def factors(n):
fac = 0
for i in xrange(2, n):
if n % i == 0:
fac += 1
return fac
print factors(10000007)
Tôi muốn sử dụng lớp cython cho thư viện của tôi, nhưng họ dường như rất chậm so với các chương trình phong cách chức năng trong cython . Rõ ràng một cái gì đó là sai trong mã lớp cython của tôi. Làm cách nào để cải thiện tốc độ của nó?
Để tóm tắt các kết quả benchmark:
Cython lớp: 206s
Cython: 10.2s
python: 77s
Tạo C trông giống như ...? –