Zum Vergleich der Verarbeitungsgeschwindigkeit haben wir die Ausführungszeit von CPython, der offiziellen Implementierung von Python, und PyPy, der JIT-Compiler-Implementierung von Python of Python, verglichen.
Für die folgenden drei Funktionen, die in Python-Listeneinschlussnotation verwendet werden, So messen Sie die Ausführungszeit mit Python Teil 1 Der in (: //qiita.com/intermezzo-fr/items/9ac2916a9155d5317ebc) definierte Dekorator wurde verwendet.
# 1. testfunc1:Bereiten Sie eine leere Liste vor und hängen Sie sie an
@time
def testfunc1(rangelist):
templist = []
for temp in rangelist:
templist.append(temp)
# 2. testfunc2: 1+Objektivieren anhängen
@time
def testfunc2(rangelist):
templist = []
append = templist.append
for temp in rangelist:
append(temp)
# 3. testfunc3:Listeneinschlussnotation
@time
def testfunc3(rangelist):
templist = [temp for temp in rangelist]
def time(func):
import functools
import datetime
@functools.wraps(func)
def wrapper(*args, **kwargs):
start = datetime.datetime.today()
result = func(*args, **kwargs)
end = datetime.datetime.today()
return end - start
return wrapper
Die Versionen von CPython und PyPy lauten wie folgt.
CPython
Python 2.7.4 (default, Apr 6 2013, 19:54:46) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
PyPy
Python 2.7.3 (87aa9de10f9c, Nov 24 2013, 17:46:53)
[PyPy 2.2.1 with MSC :.1500 32 bit] on win32
Type "help", "copyright", "credits" or "license" for more information
And now for something completely different: ``PyPy 1.3 released''
Für jede Funktion wurde der Prozess des Hinzufügens von 10.000.000 Elementen zur Liste zehnmal ausgeführt und die durchschnittliche Ausführungszeit ermittelt.
CPython
>>> rangelist = range(1,10000000)
>>> print reduce(lambda x, y: x + y, [testfunc1(rangelist) for temp in range(0,10)])/10
0:00:00.998600
>>> print reduce(lambda x, y: x + y, [testfunc2(rangelist) for temp in range(0,10)])/10
0:00:00.723500
>>> print reduce(lambda x, y: x + y, [testfunc3(rangelist) for temp in range(0,10)])/10
0:00:00.399900
PyPy
>>> rangelist = range(1,10000000)
>>> print reduce(lambda x, y: x + y, [testfunc1(rangelist) for temp in range(0,10)])/10
0:00:00.290300
>>> print reduce(lambda x, y: x + y, [testfunc2(rangelist) for temp in range(0,10)])/10
0:00:00.275500
>>> print reduce(lambda x, y: x + y, [testfunc3(rangelist) for temp in range(0,10)])/10
0:00:00.046300
Für einen genauen Vergleich müssen Sie den ersten überspringen und viel tun, aber wir haben hier nichts getan.
Jede Vergrößerung (CPython-Ausführungszeit ÷ PyPy-Ausführungszeit) ist wie folgt. Je höher die Zahl, desto schneller PyPy.
In PyPy ist testfunc3, die Version mit Listeneinschluss, besonders schnell. Ich dachte daran, Lua im Zusammenhang mit dem JIT-Compiler zu studieren, aber ich dachte, ich sollte in diesem Fall PyPy studieren.