大卫的帖子试图显示Windows上的时钟分辨率是多少。我被他的输出搞糊涂了,所以我写了一些代码,显示我的Windows 8 x64笔记本电脑上的time.time()分辨率为1毫秒:# measure the smallest time delta by spinning until the time changes
def measure():
t0 = time.time()
t1 = t0
while t1 == t0:
t1 = time.time()
return (t0, t1, t1-t0)
samples = [measure() for i in range(10)]
for s in samples:
print s
哪些输出:(1390455900.085, 1390455900.086, 0.0009999275207519531)
(1390455900.086, 1390455900.087, 0.0009999275207519531)
(1390455900.087, 1390455900.088, 0.0010001659393310547)
(1390455900.088, 1390455900.089, 0.0009999275207519531)
(1390455900.089, 1390455900.09, 0.0009999275207519531)
(1390455900.09, 1390455900.091, 0.0010001659393310547)
(1390455900.091, 1390455900.092, 0.0009999275207519531)
(1390455900.092, 1390455900.093, 0.0009999275207519531)
(1390455900.093, 1390455900.094, 0.0010001659393310547)
(1390455900.094, 1390455900.095, 0.0009999275207519531)
还有一种方法,对delta进行1000个样本的平均值:reduce( lambda a,b:a+b, [measure()[2] for i in range(1000)], 0.0) / 1000.0
两次连续运行时的输出:0.001
0.0010009999275207519
所以我的Windows 8 x64上的time.time()分辨率是1毫秒。
对time.clock()执行类似的运行将返回0.4微秒的分辨率:def measure_clock():
t0 = time.clock()
t1 = time.clock()
while t1 == t0:
t1 = time.clock()
return (t0, t1, t1-t0)
reduce( lambda a,b:a+b, [measure_clock()[2] for i in range(1000000)] )/1000000.0
返回:4.3571334791658954e-07
即~0.4e-06
关于time.clock()的一个有趣的事情是,它返回自第一次调用该方法以来的时间,因此如果您想要微秒分辨率的墙时间,可以执行以下操作:class HighPrecisionWallTime():
def __init__(self,):
self._wall_time_0 = time.time()
self._clock_0 = time.clock()
def sample(self,):
dc = time.clock()-self._clock_0
return self._wall_time_0 + dc
(这可能会在一段时间后漂移,但您可以偶尔更正,例如dc > 3600将每小时更正一次)