Python 如何在满足while循环条件时中断time.sleep()

Python 如何在满足while循环条件时中断time.sleep(),python,time,while-loop,alarm,python-datetime,Python,Time,While Loop,Alarm,Python Datetime,我在做一个根据交通情况调整的报警器。经过一番周折后,我决定最好让程序每隔15分钟左右从API获取一次数据。但是,我注意到,如果在time.sleep()处于活动状态时满足while循环条件,则在整个time.sleep()结束之前,它不会中断。当条件满足时,有没有办法使其中断,即使是在时间内。sleep()?提前谢谢 while datetime.datetime.now() < self.wakeuptime: #refers to alarm time res

我在做一个根据交通情况调整的报警器。经过一番周折后,我决定最好让程序每隔15分钟左右从API获取一次数据。但是,我注意到,如果在time.sleep()处于活动状态时满足while循环条件,则在整个time.sleep()结束之前,它不会中断。当条件满足时,有没有办法使其中断,即使是在时间内。sleep()?提前谢谢

while datetime.datetime.now() < self.wakeuptime: #refers to alarm time

            resp = requests.get(url=url, params=param)
            data = json.loads(resp.content)
            simplifiedtime = datetime.datetime.strptime(data["routes"][0]["legs"][0]["departure_time"]["text"], "%I:%M%p").time()
            #gets suggested departure time from api

            combinedsimplifiedtime=datetime.datetime.combine(today, simplifiedtime)
            self.wakeuptime = combinedsimplifiedtime  - datetime.timedelta(minutes=15)
            #resets wakeuptime value depending on api
            self.timetogo = combinedsimplifiedtime
            print self.wakeuptime
            time.sleep(900)
            #waits 15 minutes and checks again until wakeuptime
while datetime.datetime.now()
您可以使用另一个while循环来检查当前时间,其频率比从API更新的时间要高得多。代替时间。睡眠(900)你可以做:

start_pause = datetime.datetime.now()
while (datetime.datetime.now()-start_pause).seconds < 900 \
    and datetime.datetime.now() < self.wakeuptime:
    time.sleep(1)
start\u pause=datetime.datetime.now()
while(datetime.datetime.now()-start\u pause)。秒<900\
和datetime.datetime.now()

这仍然只会在900秒后运行外部循环。

self.wakeuptime
中减去
datetime.now()
;如果差异小于900秒,只为差异而睡觉。嘿,谢谢你的评论@瑞安!唯一的问题是我希望它检查15分钟的间隔,因为差异将超过900秒,我希望程序每15分钟持续检查流量,除非满足while循环条件……如果差异不小于900秒,则睡眠900秒。哦!伟大的解决方案,以及!非常感谢。谢谢你的回答!唯一的问题是我需要循环即使在900秒的间隔内也要中断。无论如何,是否需要等待900秒,但如果满足while循环条件,请停止在中间。@杰克格鲁伯我更新了答案,如果我理解你的目标,它应该这样做,正确地把这个放在你现有的一个代替调用“代码>睡眠< /代码>哦,好的,现在就试试。它起作用了!非常感谢你!我希望我能投票10000次,但我还没有足够的声誉。你能解释一下为什么在我这段时间这么做吗?