在while循环中使用time.time()导致函数被调用两次

时间:2019-05-25 13:42:33

标签: python time sleep

我创建了一个像这样的函数:

import time

def func(seconds):
    time.sleep(seconds)
    print(f'waited {seconds} seconds')

现在,如果我这样创建while loop并调用func(6),则6秒钟后,它将打印waited 6 seconds

start_time = time.time()
while time.time() - start_time < 5:
    func(6)

output:
waited 6 seconds

但是,如果我创建相同的while loop,同时调用func(4),则脚本将等待4秒钟,然后打印waited 4 seconds,并在4秒钟后,它将打印waited 4 seconds再次!

start_time = time.time()

while time.time() - start_time < 5:
    func(4)

output:
waited 4 seconds
waited 4 seconds

为什么会这样?

我了解为什么func(6)会这样,但是我希望func(4)仅执行一次,因此只打印一次waited 4 seconds

3 个答案:

答案 0 :(得分:2)

while条件检查是否已过去五秒钟。对于func(6),“ 6秒> 5秒”,因此条件得到满足,并结束了while循环。当func(4)返回时,条件是“ 4秒> 5秒”不是True,因此while循环将再次迭代。

答案 1 :(得分:1)

会发生什么:

start_time = time.time()               # captures the time right now()
while time.time() - start_time < 5:    # 1.) checks the time right after last check
                                       # 3.) checks the time right after 6s passed
    func(6)                            # 2.) waits 6 seconds
                                       # 4.) done

使用4s时:

start_time = time.time()               # captures the time right now()
while time.time() - start_time < 5:    # 1.) checks the time right after last check
                                       # 3.) checks the time right after 4s passed, still < 5
                                       #     (should be something along 4.00023 or so)
                                       # 5.) checks the time afte4 4+4s passed
    func(4)                            # 2.) waits 4 seconds
                                       # 4.) waits 4 more seconds
                                       # 6.) done

减去时间可让您浮动:

import time

t = time.time()
time.sleep(1)           # guaranteed to wait at least 1s
print(time.time()-t)  

输出:

1.00106596947

time.sleep(4)之后,您仍然远离5-这是它两次进入循环的原因。

答案 2 :(得分:0)

针对时间增量计算的while条件(<5)将允许while循环在4秒钟的睡眠后再次进入while循环,例如,新的时间增量可能是在第一次4秒钟的睡眠后为4.0022xxx,因为条件(4.0022) xx <5)为True,它将导致第二个4秒钟的睡眠。