python-3.x 经过一段时间后,使用sleep函数中断while循环

6qqygrtg  于 2023-02-17  发布在  Python
关注(0)|答案(3)|浏览(86)

如何在使用sleep函数的某个时间后停止while循环?while循环中的条件无法正常工作,因为sleep函数暂停了代码的执行。
在这种情况下,在while循环停止之前,我有40秒的延迟:

# timeout for 10 minutes
timeout = time.time() + 60*10

while True:
    if time.time() >= timeout:
        break
    # do something
    sleep(20)
    # do something
    sleep(20)
rqqzpn5f

rqqzpn5f1#

也许,最快的解决办法将是设置一定数量的睡眠。

timeout = time.time() + 60*10

while time.time() < timeout:

    # do something
    time_left = max(0,min(20, timeout - time.time()))
    sleep(time_left)

    if time_left == 0:
        break

    time_left = max(0,min(20, timeout - time.time()))
    # do something
    sleep(time_left)

不是最好的解决方案。但应该可以

vof42yt1

vof42yt12#

你可以使用下面的代码。

import datetime
import time

timeout = datetime.datetime.now() + datetime.timedelta(seconds=20) # define here!

while True:
    now = datetime.datetime.now()
    if now >= timeout:
        print('time is up !')
        break
    else:
        print('do something')
        time.sleep(5) # define here!
        continue
qvsjd97n

qvsjd97n3#

看起来你需要一个可变的睡眠时间。
大概是这样的

from time import time, sleep

timeout = time() + 10 * 60

while time() < timeout:
    # do some work
    sleep_duration = min(20, timeout - time())
    sleep(sleep_duration)

这意味着睡眠时间最多20秒

相关问题