Ein Nachteil ist, dass es oft nur etwas bei Funktionen bringt, die mehr als einmal aufgerufen werden. Der erste Aufruf ist nämlich unter Umständen langsamer als gewöhnlich, weil dabei die Übersetzung in Maschinencode angestossen wird.
Ausserdem steigt der Speicherverbrauch an, insbesondere wenn eine Funktion mit den verschiedensten Typen aufgerufen wird, weil es dann für jede Variante eine spezialisierte Maschinenspracheroutine gibt.
Es kann also durchaus Sinn machen nicht alles unter Psyco zu stellen, sondern nur gezielt die Flaschenhälse übersetzen zu lassen.
Python 2.5 30% schneller als 2.4?
Hallo!
Ich hab mal einen Vergleich von 2.4 und 2.3 gemacht.
Ich habe eine Fakultätsfunktion zum Vergleich verwendet:
Mit Python 2.3:
Mit Python 2.4:
Muss die Funktion noch auf 2.5 testen, aber mir kommt der Unterschied schon mächtig vor...
Auf einem unserer starken Rechner, schauts mit 2.4 dann so aus:
Ich hab mal einen Vergleich von 2.4 und 2.3 gemacht.
Ich habe eine Fakultätsfunktion zum Vergleich verwendet:
Code: Alles auswählen
import time
def fac(x):
if x == 0:
return 1
else:
x = x*fac(x-1)
return x
def time_fac(repeats):
st = time.time()
i = 0
while i <= repeats:
fac(30)
i += 1
et = time.time()
print "Runtime %s" % (et-st)
Code: Alles auswählen
>>> time_fac(25000)
Runtime 1.43181419373
>>> time_fac(25000)
Runtime 1.45611190796
>>> time_fac(25000)
Runtime 1.42871999741
>>> time_fac(25000)
Runtime 1.41866183281
>>> time_fac(25000)
Runtime 1.43753600121
Code: Alles auswählen
>>> time_fac(25000)
Runtime 0.769237041473
>>> time_fac(25000)
Runtime 0.768352031708
>>> time_fac(25000)
Runtime 0.770421981812
>>> time_fac(25000)
Runtime 0.835741043091
>>> time_fac(25000)
Runtime 0.773319959641
Auf einem unserer starken Rechner, schauts mit 2.4 dann so aus:
Code: Alles auswählen
>>> time_fac(25000)
Runtime 0.383197069168
>>> time_fac(25000)
Runtime 0.384837865829
>>> time_fac(25000)
Runtime 0.368741035461
>>> time_fac(25000)
Runtime 0.369416952133
>>> time_fac(25000)
Runtime 0.384665966034
Zwischen 2.4 und 2.5 kann ich keinen so gravierenden Unterschied feststellen:
Python 2.4:
Python 2.5:
Die "Beschleunigung" innerhalb der beiden Tests liegt am Powermanagement das erst nach ein wenig CPU-Last den Prozessortakt auf volle Leistung hochschraubt.
Python 2.4:
Code: Alles auswählen
In [52]: for dummy in xrange(10):
....: test.time_fac(25000)
....:
Runtime 1.23738694191
Runtime 0.98073387146
Runtime 0.572645902634
Runtime 0.57325720787
Runtime 0.572843074799
Runtime 0.572781085968
Runtime 0.572861909866
Runtime 0.572387933731
Runtime 0.572809934616
Runtime 0.572164058685
Code: Alles auswählen
>>> for dummy in xrange(10):
... test.time_fac(25000)
...
Runtime 1.09599494934
Runtime 0.557917118073
Runtime 0.545745849609
Runtime 0.557101964951
Runtime 0.544756889343
Runtime 0.550202846527
Runtime 0.557132005692
Runtime 0.551975011826
Runtime 0.557483911514
Runtime 0.549374103546