Während ich an einem ziemlich großen Python (3) -Projekt gearbeitet habe, habe ich dieses merkwürdige Verhalten bei der Iteration durch ein Wörterbuch sehr selten (< 0.1% der Fälle) gemacht von Zeiten länger als normal.Warum dauert das Parsing eines Diktats sehr viel länger als gewöhnlich?
Hier ist ein sehr minimales Beispiel, die das Verhalten zeigt:
from time import perf_counter
from statistics import mean
d = {"1": 0}
times = []
for _ in range(1000000):
start = perf_counter()
d = {k: v for k, v in d.items()}
diff = (perf_counter() - start) * 10e6
if diff > 0:
times.append(diff)
print("Mean: {}".format(mean(times)))
print("Max: {}".format(max(times)))
Eg. das Ausführen dieses einmal gibt mir eine durchschnittliche Zeit von 10.806199298240244 Mikrosekunden, aber eine maximale Zeit von 31015.980057418346 Mikrosekunden, etwa 3000 mal länger als normal.
Gibt es eine Möglichkeit, ich kann dieses Verhalten vermeiden oder ist es Python inhärent?
Edit: Timed mit perf_counter() anstelle von datetime
FWIW, ich kann nicht sagen, ob dieses Phänomen real ist oder nicht - jedoch ist die Verwendung von "datetime.now()" zum Timing von etwas (insbesondere etwas so kleines) wahrscheinlich sehr ungenau. "timeit.default_timer" ist wahrscheinlich ein viel besserer Ort, um dieses Phänomen zu verstehen ... – mgilson
Versuchen Sie, Garbage Collection für den Test zu deaktivieren? – Ryan