计时器显示消极时间已过

时间:2013-07-22 13:21:25

标签: 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)

这大部分时间都会产生正确的输出,例如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

time.clock()不应该以秒为单位返回经过的时间吗? time.time()调用可以精确跟踪已用时间(以秒为单位)(例如,最后一次调用是在经过15分钟后进行的,等于900秒),但我不知道time.clock()正在做什么。< / p>

2 个答案:

答案 0 :(得分:4)

我怀疑你得到某种溢出。

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

时钟的linux手册页建议时钟周期的返回值,因此如果时钟从高值启动并停止在低值,并且您的差异已签名,则可能会在时间过去时得到负值

由于你的计时事件持续了几秒钟,因此time.time()函数可能更适合你正在做的事情。

答案 1 :(得分:1)

time.clock()测量Unix系统上的CPU时间,而不是测试时间。有关基础系统调用的更多信息,请参阅http://pubs.opengroup.org/onlinepubs/007908799/xsh/clock.html(注意它可以包装的部分)。

如果您想测量壁垒时间,请使用time.time()