【发布时间】:2017-06-25 05:02:11
【问题描述】:
在处理一个相当大的 Python(3) 项目时,我遇到了这种奇怪的行为,即迭代字典会非常偶尔(
这是一个显示行为的非常小的示例:
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 固有的?
编辑:使用 perf_counter() 而不是 datetime 进行计时
【问题讨论】:
-
FWIW,我不能说这种现象是否真实——但是,使用
datetime.now()来计时(尤其是这么小的东西)可能非常不准确。timeit.default_timer可能是开始了解这种现象的更好地方... -
尝试为测试禁用垃圾收集?
标签: python python-3.x dictionary optimization