À titre de comparaison de la vitesse de traitement, nous avons comparé le temps d'exécution de CPython, qui est l'implémentation officielle de Python, et PyPy, qui est l'implémentation du compilateur JIT par Python de Python.
Pour les trois fonctions suivantes utilisées dans la Notation d'inclusion de liste Python, Comment mesurer le temps d'exécution avec Python Partie 1 Le décorateur défini dans (: //qiita.com/intermezzo-fr/items/9ac2916a9155d5317ebc) a été utilisé.
# 1. testfunc1:Préparez une liste vide et ajoutez
@time
def testfunc1(rangelist):
templist = []
for temp in rangelist:
templist.append(temp)
# 2. testfunc2: 1+Objectify append
@time
def testfunc2(rangelist):
templist = []
append = templist.append
for temp in rangelist:
append(temp)
# 3. testfunc3:Notation d'inclusion de liste
@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
Les versions de CPython et PyPy sont les suivantes.
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''
Pour chaque fonction, le processus d'ajout de 10 000 000 éléments à la liste a été effectué 10 fois et le temps d'exécution moyen a été obtenu.
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
Pour une comparaison exacte, vous devrez sauter le premier et faire beaucoup de choses, mais nous ne faisons rien ici.
Chaque agrandissement (temps d'exécution CPython ÷ temps d'exécution PyPy) est le suivant. Plus le nombre est élevé, plus PyPy est rapide.
Dans PyPy, testfunc3, la version d'inclusion de liste, est particulièrement rapide. Je pensais étudier Lua lié au compilateur JIT, mais j'ai pensé que je devrais étudier PyPy dans ce cas.
Recommended Posts