计时器显示消极时间已过

Gab*_*iel 8 python time

我正在使用一个非常简单的代码来为for语句中的每个循环计时.它看起来像这样:

import time

for item in list_of_files:

    # Start timing this loop.
    start = time.clock()

    # Do a bunch of stuff.

    # Get time elapsed in seconds.
    elapsed = time.clock() - start

    # Get minutes and seconds.
    m, s = divmod(elapsed, 60)

    # Print result.
    print 'End of analysis for %s in %dm %02ds.\n'% (item, m, s)
Run Code Online (Sandbox Code Playgroud)

这大部分时间会产生正确的输出,9m 52s但有时会出现大的循环(需要一些时间),我会得到负面结果-53m 17s.

我无法确定一个明确的限制,其中结果开始显示为负值,但它显然只发生在> 20分钟的经过时间,但不是每个花费超过20分钟的循环(即:它不一致).

我的代码中有什么东西可以计算导致这种情况的每个循环吗?

我正在使用Spyder我的IDE.我比较了time.clock()表现得如何time.time(),这就是我所看到的:

>>> st1, st2 = time.clock(), time.time()
>>> st1,st2
(507.65, 1374502193.357196)
>>> print time.clock()-st1, time.time()-st2
0.14 15.1921429634
>>> print time.clock()-st1, time.time()-st2
0.34 35.0087578297
>>> print time.clock()-st1, time.time()-st2
0.67 69.8715758324
>>> print time.clock()-st1, time.time()-st2
0.77 80.0557789803
>>> print time.clock()-st1, time.time()-st2
1.25 130.559605837
>>> print time.clock()-st1, time.time()-st2
3.02 309.845729828
>>> print time.clock()-st1, time.time()-st2
8.9 899.936934948
Run Code Online (Sandbox Code Playgroud)

不应该time.clock()以秒为单位返回经过的时间?该time.time()呼叫保持的经过时间精确轨道秒(例如,经过15分钟过去了,等于900秒最后一次调用时),但我不知道time.clock()在做什么.

Zhe*_*Zhe 4

我怀疑你遇到了某种溢出。

http://linux.die.net/man/3/clock

Linux 时钟手册页建议时钟周期的返回值,因此,如果时钟碰巧以高值开始并以低值停止,并且您的差异已签名,则您可能会得到一个负值来表示所经过的时间。

由于您要对持续数秒的事件进行计时,因此 time.time() 函数可能更适合您正在做的事情。