哪个更适合用于Python中的计时?time.clock()或time.time()?哪一个提供更准确?
例如:
start = time.clock()
... do something
elapsed = (time.clock() - start)
Run Code Online (Sandbox Code Playgroud)
与
start = time.time()
... do something
elapsed = (time.time() - start)
Run Code Online (Sandbox Code Playgroud) 即使他们被弃用,没有比一个更好的模块time(即timeit),我想知道这两种功能之间的差异time.clock()和time.time().
从后者(time.time())开始,它基本上以秒为单位返回从01/01/1970(如果我没有错)经过的时间,精度一般为1秒."直到这里很容易.
相反,time.clock()仍然让我感到困惑.来自doc:
在Unix上,将当前处理器时间返回为以秒为单位的浮点数.精度,实际上是"处理器时间"含义的定义,取决于同名C函数的精度,但无论如何,这是用于对Python或时序算法进行基准测试的函数.
在Windows上,此函数返回自第一次调用此函数以来经过的挂钟秒,作为浮点数,基于Win32函数QueryPerformanceCounter().分辨率通常优于1微秒.
现在在Windows中它非常清楚time.time(),只有更好的精度才能做到这一点.
但在Unix/Linux中我无法理解.我尝试了以下代码:
import time
def procedure():
time.sleep(2.5)
# measure process time
t0 = time.clock()
procedure()
print(time.clock() - t0, "process time")
Run Code Online (Sandbox Code Playgroud)
而我得到的5.300000000000096e-05 seconds process time对我来说真的很奇怪.
阅读这个已经发布的问题答案说:
[...] time.clock()测量当前进程使用的CPU时间量.
但我无法得到它,当前进程所用的时间在做什么?当我time.clock()在Unix上调用时,我得到一个浮点数,这在那一瞬间意味着什么?过程消耗的时间从?? 至 ??
我要疯了吗?我在 x86_64 上运行它。
#include <stdio.h>
#include <time.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
printf("Clock: %f\n", clock() / (double)CLOCKS_PER_SEC);
sleep(1);
printf("Clock: %f\n", clock() / (double)CLOCKS_PER_SEC);
sleep(1);
printf("Clock: %f\n", clock() / (double)CLOCKS_PER_SEC);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这打印
时钟:0.002880
时钟:0.002968
时钟:0.003019
它显然在线路上等待了一秒钟sleep(1),但输出显然是错误的。
如果这不起作用,是否有可移植的 C 替代方案?