Python For循环列表,每5分钟一次

时间:2014-08-06 19:43:07

标签: python python-2.7

matches = []
done = []
for item in matches:
    dofunctioneveryloop()
    done.extent(item)
    dofunctiononce5min()

如何在5分钟内在此循环中执行dofunctiononce5min()?这是备份到文件功能这可能吗?

3 个答案:

答案 0 :(得分: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
...

答案 1 :(得分:0)

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

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

import time

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

参数的时间应该分数为0.5秒。

答案 2 :(得分:0)

假设循环时间超过五分钟,您可以使用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()