Python的time.clock()与time.time()的准确性?

时间:2020-03-05 18:59:26  来源:igfitidea点击:

在Python中使用哪个计时更好? time.clock()或者time.time()?哪一个提供更高的准确性?

例如:

start = time.clock()
... do something
elapsed = (time.clock() - start)

start = time.time()
... do something
elapsed = (time.time() - start)

解决方案

回答

取决于我们所关心的。如果我们指的是WALL TIME(例如,墙上的时间),则time.clock()无法提供准确性,因为它可以管理CPU时间。

回答

clock()->浮点数

返回自进程开始以来或者之后的CPU时间或者实时时间
第一次调用" clock()"。这与系统一样精确
记录。

time()->浮点数

返回自纪元以来的当前时间(以秒为单位)。
如果系统时钟提供小数秒,则可能会出现。

通常," time()"更为精确,因为操作系统不会以存储系统时间(即实际时间)的精度来存储进程运行时间。

回答

简短的答案是:在大多数情况下," time.clock()"会更好。
但是,如果我们要计时某些硬件(例如,我们将某些算法放入GPU中),则" time.clock()"将摆脱该时间,而" time.time()"是剩下的唯一解决方案。

注意:无论使用哪种方法,时间都将取决于我们无法控制的因素(何时切换过程,多久切换一次……),这种情况在使用time.time()时会更糟,但在使用time.clock时也会存在。 ()`,因此我们不应只运行一个计时测试,而应始终运行一系列测试并查看时间的均值/方差。

回答

简短的答案:在Python中使用time.clock()进行计时。

在* nix系统上,clock()以浮点数形式返回处理器时间,以秒为单位。在Windows上,它以浮点数的形式返回自第一次调用此函数起经过的秒数。

time()以毫秒为单位返回自纪元以来的秒数(以浮点数表示)。不能保证我们会获得1秒钟更好的精度(即使time()返回浮点数)。还要注意,如果在两次调用此函数之间已将系统时钟设置回去,则第二个函数调用将返回一个较低的值。

回答

从3.3版本开始,不建议使用time.clock(),建议改用time.process_time()或者time.perf_counter()。

根据时间模块文档,以前在2.7中:

time.clock()
  
  On Unix, return the current processor time as a floating point number
  expressed in seconds. The precision, and in fact the very definition
  of the meaning of “processor time”, depends on that of the C function
  of the same name, but in any case, this is the function to use for
  benchmarking Python or timing algorithms.
  
  On Windows, this function returns wall-clock seconds elapsed since the
  first call to this function, as a floating point number, based on the
  Win32 function QueryPerformanceCounter(). The resolution is typically
  better than one microsecond.

另外,还有用于对代码段进行基准测试的timeit模块。

回答

其他人回答了re:time.time()vs. time.clock()`。

但是,如果我们出于基准测试/性能分析的目的而定时执行代码块,则应该查看一下" timeit"模块。

回答

在Unix上,time.clock()测量当前进程已使用的CPU时间量,因此,它对于测量过去某个时间点的经过时间没有好处。在Windows上,它将测量自第一次调用该功能以来已过去的时钟秒数。在任何一个系统上,time.time()将返回自纪元以来经过的秒数。

如果我们正在编写仅适用于Windows的代码,则两者都可以使用(尽管我们将以不同的方式使用两者)time.clock()不需要减法。如果这将在Unix系统上运行,或者我们想要保证可移植的代码,则需要使用time.time()。

回答

区别是特定于平台的。

例如,Windows上的clock()与Linux上的时钟有很大不同。

对于我们描述的示例种类,我们可能需要" timeit"模块。

回答

据我所知,time.clock()具有系统所允许的精度。

回答

要记住的一件事:
更改系统时间会影响" time.time()",但不会影响" time.clock()"。

我需要控制一些自动测试的执行。如果测试用例的一个步骤花费的时间超过给定的时间,则该TC将被中止以继续进行下一个步骤。

但有时需要更改系统时间(以检查被测应用程序的调度程序模块),因此在将系统时间设置为未来几小时后,TC超时到期并且测试用例被中止。我必须从" time.time()"切换到" time.clock()"才能正确处理。