Python的time.sleep()方法等待不正确的时间

时间:2014-08-18 01:31:12

标签: python time

我曾经遇到过这个问题几次;重启python似乎工作(或ipython)。但是,例如,这是运行以下代码的一种可能输出:

startt = time.time()
for i in range(4):
    time.sleep(1)
    print '%.3f'%(time.time()-startt)

我获得:

9.989
10.989
11.990
12.991

为什么它在开始工作之前等待这么久?偶尔,它会在我运行命令后的10秒甚至11秒开始。

我使用Mac OS X(Mavericks),IPython 1.2.1(使用pylab),Python 2.7.5

我导入: os,cv2,time,random,Quartz,LaunchServies,pdb,sys,appscript和numpy。

1 个答案:

答案 0 :(得分:7)

根据time.sleep docs

  

暂停执行指定的秒数。参数可以是浮点数,以指示更精确的睡眠时间。实际的暂停时间可能小于请求的时间,因为任何捕获的信号将在执行该信号的捕获例程后终止sleep()。 此外,由于系统中其他活动的安排,暂停时间可能比任意金额要求的时间长。

time.sleep的实际等待时间无法保证,具体取决于主机系统的加载方式。如果您机器上的某些东西占用了资源,Python进程可能会被延迟直到恢复。

但是,秒的延迟太高了。您是否有机会在Python交互式shell中尝试此操作?如果是这样,它可能会干扰,例如:

>>> import time
>>> startt = time.time()
>>> for i in range(4):
...     time.sleep(1)
...     print '%.3f'%(time.time()-startt)
...
3.147
4.147
5.147
6.147
>>> startt = time.time()
>>> for i in range(4):
...     time.sleep(1)
...     print '%.3f'%(time.time()-startt)
...
4.949
5.949
6.949
7.949

因为在编写或粘贴其余代码之前评估startt = time.time(),这可能需要几秒钟。

但如果我将它包装在一个方法中,它的行为就像预期一样:

>>> def test():
...     startt = time.time()
...     for i in range(4):
...         time.sleep(1)
...         print '%.3f'%(time.time()-startt)
...
>>> test()
1.000
2.000
3.000
4.000

或放入脚本:

import time

startt = time.time()
for i in range(4):
    time.sleep(1)
    print '%.3f'%(time.time()-startt)

# $ python test.py
# 1.000
# 2.008
# 3.008
# 4.008

在这种情况下,延迟应该是毫秒级,如后一输出中所示。我怀疑它可以达到几秒钟。