【问题标题】:How to Break out of time.sleep() when while loop condition is met满足 while 循环条件时如何中断 time.sleep()
【发布时间】:2017-08-01 14:59:42
【问题描述】:

我正在制作一个根据流量进行调整的警报。经过一番折腾,我决定最好让程序每 15 分钟左右从 API 获取数据。但是,我注意到如果在 time.sleep() 处于活动状态时满足 while 循环条件,它不会中断,直到 time.sleep() 的整个持续时间结束。即使在 time.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

【问题讨论】:

  • self.wakeuptime中减去datetime.now();如果差值小于 900 秒,则只为差值休眠。
  • 嘿,感谢您的评论! @瑞安!唯一的事情是我希望它检查 15 分钟的间隔,因为差异将超过 900 秒,我希望程序每 15 分钟不断检查流量,除非满足 while 循环条件。
  • …如果差小于900秒,休眠900秒。
  • 哦!很好的解决方案!谢谢!

标签: python time while-loop alarm python-datetime


【解决方案1】:

您可以使用另一个 while 循环比从 API 更新的循环更频繁地检查当前时间。而不是time.sleep(900) 你可以这样做:

start_pause = datetime.datetime.now()
while (datetime.datetime.now()-start_pause).seconds < 900 \
    and datetime.datetime.now() < self.wakeuptime:
    time.sleep(1)

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

【讨论】:

  • 感谢您的回答!唯一的问题是我确实需要循环中断,即使它是在 900 秒的时间间隔内。如果满足while循环条件,是否有让它等待900秒但在中间停止?
  • @JackGruber 我更新了答案,如果我正确理解你的目标,它现在应该这样做
  • 把这个放在你现有的一个中,代替对sleep的调用
  • 哦,好的,现在就试试。
  • 成功了!太感谢了!我希望我可以投票 10000 次,但我还没有足够的声誉。你有没有机会解释为什么这在我的 time.sleep 电话中起作用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多