Несмотря на то, что я работаю над довольно большим проектом Python (3), я столкнулся с этим странным поведением, когда итерация через словарь будет происходить очень редко (< 0,1% времени) времени дольше, чем обычно.Почему синтаксический анализ dict очень часто занимает гораздо больше времени, чем обычно.
Вот очень минимальный пример, который показывает поведение:
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)))
Например. запуск этого однажды дает мне среднее время 10,806199298240244 микросекунд, но максимальное время составляет 31015,980057418346 микросекунд, что примерно в 3000 раз больше, чем обычно.
Есть ли способ избежать этого поведения или это присуще Python?
Edit: Timed с помощью perf_counter() вместо DateTime
FWIW, я не могу сказать, действительно ли это явление реально. Однако использование 'datetime.now()' для синхронизации чего-то (особенно чего-то такого небольшого), вероятно, будет очень неточным. 'timeit.default_timer', вероятно, станет намного лучшим местом для понимания этих явлений ... – mgilson
Попробуйте отключить сбор мусора для теста? – Ryan