matches = []
done = []
for item in matches:
dofunctioneveryloop()
done.extent(item)
dofunctiononce5min()
如何在5分钟内在此循环中执行dofunctiononce5min()?这是备份到文件功能这可能吗?
答案 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()