如何在包含sleep函数的while循环中实现定时终止?
在含sleep的while循环中实现定时停止
当while循环里调用sleep时,程序会进入暂停状态,这段时间没法执行循环内的条件判断——哪怕超时时间到了,也得等sleep跑完才能退出,导致退出延迟。
原写法的问题
比如下面的代码,明明设置了10分钟超时,但如果超时时间刚好落在两次sleep的执行过程中,程序必须等两次sleep(合计40秒)全部完成后,才会检查到超时并退出:
import time # 超时设置为10分钟 timeout = time.time() + 60 * 10 while True: if time.time() >= timeout: break # 执行操作 time.sleep(20) # 执行操作 time.sleep(20)
更及时的停止方案
如果想要尽可能快地响应超时,避免长时间延迟,可以把长sleep拆成多个短sleep,每次sleep一小段后就检查一次超时条件:
import time # 超时设置为10分钟 timeout = time.time() + 60 * 10 # 每次短sleep的时长(可根据需求调整) short_sleep = 1 # 单次循环内需要的总sleep时长 total_sleep_time = 40 while True: if time.time() >= timeout: break # 执行第一个操作 # 拆分长sleep为多次短间隔,每次后检查超时 elapsed_sleep = 0 while elapsed_sleep < total_sleep_time and time.time() < timeout: time.sleep(short_sleep) elapsed_sleep += short_sleep # 执行第二个操作
这种写法下,一旦超时时间到了,最多只会延迟1秒就退出循环,不会出现几十秒的滞后。
内容的提问来源于stack exchange,提问作者Lindenbar
相关产品推荐
相关产品推荐

