Python中time.clock()休眠后计算结果异常偏小的技术问询
为什么
time.clock()计算sleep后的时间差极小? 这是因为你混淆了处理器时间和**墙上时钟时间(Wall-Clock Time)**的概念,而time.clock()在Unix系统下返回的正是前者。
核心原因解释
文档说明“在Unix系统中,返回以秒为单位的当前处理器时间(浮点数)”
这里的「处理器时间」指的是CPU实际分配给你的进程的运行时间,当你调用time.sleep(3)时,你的进程会被操作系统挂起,这段时间里CPU会去处理其他任务,并不会为你的进程分配计算资源。所以time.sleep(3)的3秒完全不会被计入time.clock()的差值中,你看到的极小数值只是代码中print语句等操作占用的一点点CPU时间。
结合你的代码示例来看
import time start = time.clock() print(start) time.sleep(3) end = time.clock() print(end) print(end-start)
输出的4.199999999998649e-05就是这段代码除了sleep之外,其他操作消耗的CPU时间总和,和sleep的3秒完全无关。
正确的时间测量方式
另外要注意,Python 3.3及以后版本中time.clock()已经被弃用了,官方推荐使用:
time.perf_counter():测量墙上时钟时间(包括sleep的时间,适合计算程序总耗时)time.process_time():测量处理器时间(和旧的time.clock()在Unix下的行为一致,适合计算CPU实际工作时间)
比如用time.perf_counter()改写你的代码,就能得到包含sleep的3秒差值:
import time start = time.perf_counter() print(start) time.sleep(3) end = time.perf_counter() print(end) print(end-start) # 输出会接近3.0
内容的提问来源于stack exchange,提问作者AFS
相关产品推荐
相关产品推荐

