【问题标题】:Python For Loop List, Function Every 5minPython For 循环列表,每 5 分钟运行一次
【发布时间】:2014-08-06 19:43:07
【问题描述】:
matches = []
done = []
for item in matches:
    dofunctioneveryloop()
    done.extent(item)
    dofunctiononce5min()

如何在这个循环中每 5 分钟执行一次 dofunctiononce5min() ?这是备份到文件的功能可以吗?

【问题讨论】:

  • 您想每五分钟执行一次该函数,还是每五分钟执行一次在该循环内?您预计该循环需要多长时间?
  • 到目前为止你有什么尝试?您是否希望该方法等待 5 分钟然后执行某项操作或检查自上次执行以来已经 5 分钟?
  • 我理解你是否正确,你想经常执行这个循环,但函数应该在 5 分钟内被调用不超过一次?

标签: python python-2.7


【解决方案1】:

不确定我是否理解了这个问题。我假设您希望这个函数每五分钟只执行一次,不管它真正被调用的频率如何。

这可能有点矫枉过正,但为什么不使用decorator?这将为 'decorated' 函数创建一个新函数,如果自上次执行以来已过去 X 秒,该函数将执行原始函数。这将确保该函数每 5 分钟执行一次(或传递给装饰器的任何时间间隔(以秒为单位)),无论它是在该循环中还是在其他地方调用。

import time

def onceEveryXSeconds(seconds):             # this creates the decorator
    def wrapper(f):                         # decorator for given 'seconds'
        f.last_execution = 0                # memorize last execution time
        def decorated(*args, **kwargs):     # the 'decorated' function
            if f.last_execution < time.time() - seconds:
                f.last_execution = time.time()
                return f(*args, **kwargs)
        return decorated
    return wrapper

用法:

@onceEveryXSeconds(3)
def function(foo):
    print foo

while True:
    print "loop"
    function("Hello again")
    time.sleep(1)

输出,@onceEveryXSeconds(3)

loop
Hello again
loop
loop
loop
Hello again
loop
...

【讨论】:

    【解决方案2】:

    假设循环时间超过 5 分钟,您可以使用 time.time() 来确定 5 分钟结束的时间。

    import time
    
    matches = []
    done = []
    starttime = time.time()
    for item in matches:
        dofunctioneveryloop()
        done.extent(item)
        if time.time() - starttime  > 300:  
            dofunctiononce5min()
            starttime = time.time()
    

    【讨论】:

    • 这只会做一次不是吗?
    • 一旦到达条件内部,条件比较的时间将重置为当前时间。
    【解决方案3】:

    不建议您这样做。也许最好的方法是在操作系统上安排它,并定期运行它的任务。

    无论如何,如果想每x次运行一个语句,这里是一个例子

    import time
    
    for i in range(5):
        print i
        time.sleep(3) # seconds
    

    作为参数的时间应该像 0.5 秒那样分段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 2013-11-27
      • 2012-02-24
      • 2021-06-15
      相关资源
      最近更新 更多