【问题标题】:How can I repeat something for x minutes in Python?如何在 Python 中重复 x 分钟?
【发布时间】:2010-04-17 21:35:53
【问题描述】:

我有一个程序 (temptrack),我需要在其中每 x 分钟下载一次天气数据,持续 x 小时。我已经知道如何使用time.sleep(x*60) 每 x 分钟下载一次,但我不知道如何将这个过程重复几个小时。

更新: 感谢所有发布解决方案的人。 我使用“datetime.datetime.now() + datetime.timedelta(hours=x)”将示例标记为最佳答案,因为我可以最好地理解它,而且它似乎非常适合我的目的。

【问题讨论】:

    标签: python time repeat


    【解决方案1】:

    计算您想要停止正在做的任何事情的时间,并检查每次时间限制是否到期。像这样:

    finish_time = datetime.datetime.now() + datetime.timedelta(hours=6)
    while datetime.datetime.now() < finish_time:
        do_something()
        sleep_for_a_bit()
    

    【讨论】:

    • 这正是我一直在寻找的,尽管我并不知道。非常感谢。
    【解决方案2】:

    我刚刚在 Python 标准库中找到了sched

    【讨论】:

      【解决方案3】:

      您正在寻找调度程序。

      检查this thread

      【讨论】:

        【解决方案4】:

        可能有点矫枉过正,但对于运行后台任务,特别是如果您需要 GUI,我建议使用 QSystemTrayIconQTimer 检查 PyQt 路由

        【讨论】:

          【解决方案5】:

          也许我误解了你,但只要把它放在一个运行足够次数的循环中。例如,每 5 分钟下载 2 小时需要下载 24 次,所以:

          for i in range(24):
              download()
              sleep(5*60)
          

          如果你需要它是可参数化的,它只是:

          from __future__ import division
          from math import ceil
          betweenDLs = 5 # minutes
          totalTime = 2*60 # minutes
          for i in range(int(ceil(totalTime/betweenDLs))):
              download()
              sleep(betweenDLs*60)
          

          【讨论】:

          • 这是一个简单的解决方案,但如果执行函数的时间与执行之间的时间量级相似,则可能不是我们想要的。
          • 谢谢。你的第一个例子效果很好。我将只使用“for i in range(totalTime/frequency)”,这应该很好用。我知道它会四舍五入(因为我使用的是整数,而不是浮点数),但它不必非常准确。
          • 尽量避免使用 range() ,除非你需要一个真实的列表。如果您只需要运行一个 for use xrange 来代替。这将优化您的代码,因为 range() 分配整个列表,而 xrange() 只是一个迭代器。注意:在 python3 中只有 range() 并且行为类似于 xrange()
          • 我会使用 select() 来做这个:p
          • 更新:没关系,使用“for i in range(totalTime/frequency)”似乎效果不佳(这意味着使用起来太不准确)。谢谢,我会检查 xrange() 和 select()。
          猜你喜欢
          • 2016-09-08
          • 1970-01-01
          • 2011-09-09
          • 2018-10-21
          • 1970-01-01
          • 2011-12-13
          • 1970-01-01
          • 2021-09-06
          • 2020-11-17
          相关资源
          最近更新 更多