import time
from time import sleep
from datetime import datetime
while True:
print datetime.now().strftime('%Y-%m-%d %H:%M:%S')
sleep(1)
它提供输出
2018-09-23 16:14:42
2018-09-23 16:14:43
2018-09-23 16:14:44
2018-09-23 16:14:45
2018-09-23 16:14:46
2018-09-23 16:14:47
2018-09-23 16:14:48
2018-09-23 16:14:49
2018-09-23 16:14:50
2018-09-23 16:14:51
2018-09-23 16:14:53
2018-09-23 16:14:54
2018-09-23 16:14:55
2018-09-23 16:14:56
跳过第二十二行
答案 0 :(得分:1)
三个原因:time.sleep()
是不精确,您的计算机一直在任意数量的进程之间切换,并执行其余代码(查找{{1 }}参考,调用datetime.now
方法,查找now()
属性,并使用字符串参数调用strftime
方法,并打印最后一次调用的结果)需要一点时间时间也执行。
请参见time.sleep()
function documentation:
实际的暂停时间可能少于请求的暂停时间,因为任何捕获到的信号都会在执行该信号的捕获例程后终止
strftime()
。另外,由于系统中其他活动的安排,暂停时间可能比请求的时间长任意数量。
在sleep()
调用之间经过的确切时间会有所不同。
因此,您的1秒钟睡眠时间可能比一秒更长,并且打印出每次迭代所需的时间也要少一秒钟。因此有时候,这意味着您从一秒的最后一个微秒跳到了第二秒的前一个微秒,并且时间显示似乎跳了一秒。
当您看到2秒钟的“跳跃”时,将打印以下脚本:
datetime.now()
循环必须做更多的工作,因此它可能会更频繁地打印。
对我来说,在Python 2.7上,经过几分钟的运行时间后,输出:
last = datetime.now()
while True:
sleep(1)
t = datetime.now()
s_delta = t.second - last.second
if t.second < last.second: # delta to next minute
s_delta += 60
if s_delta > 1:
print('Time delta > 1s: {:.6f}'.format((t - last).total_seconds()))
last = t
因此显示可能跳了2秒,但这些步骤之间的实际时间差约为1秒,1毫秒和61微秒。