我正在运行Mac OS X 10.8并且对time.clock()有一些奇怪的行为,一些在线消息来源说我应该更喜欢time.time()来为我的代码计时。例如:
import time
t0clock = time.clock()
t0time = time.time()
time.sleep(5)
t1clock = time.clock()
t1time = time.time()
print t1clock - t0clock
print t1time - t0time
0.00330099999999 <-- from time.clock(), clearly incorrect
5.00392889977 <-- from time.time(), correct
为什么会这样?我应该使用time.time()进行可靠的估算吗?
答案 0 :(得分:7)
来自time.clock
上的文档:
在Unix上,将当前处理器时间返回为以秒为单位的浮点数。精确度,实际上是“处理器时间”含义的定义,取决于同名C函数的精度,但无论如何,这是用于对Python或时序算法进行基准测试的函数。 p>
来自time.time
上的文档:
返回自纪元以来的秒数作为浮点数。请注意,即使时间总是作为浮点数返回,但并非所有系统都提供的精度高于1秒。虽然此函数通常返回非递减值,但如果在两次调用之间设置了系统时钟,则它可以返回比先前调用更低的值。
time.time()
以秒为单位的度量,time.clock()
衡量当前进程使用的CPU时间量。但是在Windows上,这是不同的,因为clock()
也可以测量秒数。
答案 1 :(得分:7)
而不是使用time.time
或time.clock
使用timeit.default_timer
。对于所有其他平台,这将在time.clock
和sys.platform == "win32"
时返回time.time
。
这样,您的代码将使用最佳选择的计时器,独立于平台。
来自timeit.py:
if sys.platform == "win32":
# On Windows, the best timer is time.clock()
default_timer = time.clock
else:
# On most other platforms the best timer is time.time()
default_timer = time.time
答案 2 :(得分:0)
time.time()
返回“挂钟”时间。
time.clock()
返回处理器使用的时间,如果你调用time.sleep()
你没有使用处理器,那么这个过程只是不定期,直到定时器决定让进程返回cpu(除了窗口,它返回“挂钟”时间。)