繁体   English   中英

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

[英]Python For Loop List, Function Every 5min

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

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

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

这可能是矫kill过正,但是为什么不使用装饰器呢? 这将为“装饰”功能创建一个新功能,如果自上次执行以来已过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
...

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

无论如何,如果要每x次运行一条语句,这是一个示例

import time

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

作为参数的时间应小数,例如0.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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM