我曾经遇到过这个问题几次; 重启python似乎工作(或ipython).但是,例如,这是运行以下代码的一种可能输出:
startt = time.time()
for i in range(4):
time.sleep(1)
print '%.3f'%(time.time()-startt)
Run Code Online (Sandbox Code Playgroud)
我获得:
9.989
10.989
11.990
12.991
Run Code Online (Sandbox Code Playgroud)
为什么它在开始工作之前等待这么久?偶尔,它会在我运行命令后的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.
根据time.sleep文档:
暂停执行给定的秒数.参数可以是浮点数,以指示更精确的睡眠时间.实际的暂停时间可能小于请求的时间,因为任何捕获的信号将在执行该信号的捕获例程后终止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
Run Code Online (Sandbox Code Playgroud)
因为在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
Run Code Online (Sandbox Code Playgroud)
或者放入一个脚本:
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
Run Code Online (Sandbox Code Playgroud)
在这种情况下,延迟应该是毫秒级,如后一输出中所示.我怀疑它可以达到秒.