Ich habe kürzlich eine für mich recht überraschende Beobachtung gemacht. Ich habe ein script um md5 hashes zu erstellen (siehe unten angehängt) und habe mit dem timeit Modul das mal Probe laufen lassen (ca. 400 Dateien; prinzipiell alle vergleichbarer typ; audiodateien; ca. 1,4 GB)
Bei meinem alten laptop (1.73 GHz Single core, 2 GB RAM, Ubuntu Lucid) dauerte der Durchlauf im Schnitt 50 Sek. und zu meiner Überraschung bei meinem PC (2.1 GHz Dual Core, 4 GB RAM, Win XP) im Schnitt ca. 0.46 Sek (?!?). Es war mir klar, dass mein PC schneller sein wird, aber "so viel" schneller.
Gibt es da noch andere Faktoren, außer Prozessor Geschwindigkeit und RAM? Lade ich mein RAM voll und die Festplatte muss dann mithelfen? Meines Erachtens, wenn nicht weiter angegeben, benutzt ein Python Skript auch nur einen Prozessor, oder? Wenn mir das einer erklären könnte wäre das nett.
Es geht mir nicht, um das Optimieren des Skripts (zu Verbesserungsvorschlägen sage ich aber wie immer nicht nein), sondern wirklich nur darum zu verstehen, warum da so ein Riesengeschwindigkeitsunterschied ist.
-------------------------------
Hier das Skript:
Code: Alles auswählen
import hashlib
import os
import timeit
def create_md5():
li = []
for root, dirs, files in os.walk(os.getcwd()):
for f in files:
m = hashlib.md5()
with open(os.path.join(root, f), "r") as g:
while True:
data = g.read(128)
if not data:
break
m.update(data)
d = (f, m.hexdigest())
li.append(d)
with open("hash.txt", "w") as g:
for i in li:
g.write(i[1])
g.write("\t")
g.write(i[0])
g.write("\n")
if __name__ == "__main__":
t = timeit.Timer("create_md5()", "from __main__ import create_md5")
print t.timeit(1)