Python против циклов Cython - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть два небольших файла с именем LoopTest.pyx:

import time
t0= time.process_time()

class Loop():

     def __init__(self, n0):
         self.n0 = n0

     def test(self):

         cdef long long int a = 0
         for i in range(self.n0):
             a += i

         self.a = a
         self.t1 = time.process_time() - t0

         print("Total is %f: and elapsed time is %f" %(self.a,self.t1))

и LoopTestPy.py следующим образом:

import time
t0= time.process_time()

class Loop():

    def __init__(self, n0):
        self.n0 = n0

    def test(self):

        a = 0
        for i in range(self.n0):
            a += i

        self.a = a
        self.t1 = time.process_time() - t0

        print("Total is %f: and elapsed time is %f" %(self.a,self.t1))

Я создал файл setup.py следующим образом:

from distutils.core import setup
from Cython.Build import cythonize

setup(name='TestLoop',
       ext_modules=cythonize("LoopTest.pyx"))

и построен с помощью python setup.py build_ext --inplace.

при запуске следующего сценария тестирования:

from LoopTest import Loop
from LoopTestPy import Loop as PyLoop

n = 500000; 

LPPy = PyLoop(n); 
LP = Loop(n);

print('Python Loop:')
LPPy.test();

print('\n\nCython Loop:')
LP.test();

Я получаю следующие результаты:

Python Loop:
Total is 124999750000.000000: and elapsed time is 0.031250


Cython Loop:
Total is 124999750000.000000: and elapsed time is 0.046875

Похоже, Python l oop быстрее, чем Cython l oop ?! Что я делаю неправильно? Спасибо.

...