matches = []
done = []
for item in matches:
dofunctioneveryloop()
done.extent(item)
dofunctiononce5min()如何在这个循环中执行dofunctiononce5min() 5分钟?这是备份到文件功能,这可能吗?
发布于 2014-08-06 20:09:44
我不确定我是否理解这个问题。我假设您希望这个函数每五分钟只执行一次,不管它真正被调用了多少次。
这可能有点过分,但为什么不使用decorator呢?这将为“修饰”函数创建一个新函数,如果自上次执行后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
...发布于 2014-08-06 19:49:12
不建议你这样做。也许最好的方法是将它安排在操作系统上,并定期运行它。
无论如何,如果希望每隔x次运行一次语句,下面是一个示例
import time
for i in range(5):
print i
time.sleep(3) # seconds时间作为参数应该被细分为0.5秒。
发布于 2014-08-06 20:06:51
假设循环花费的时间超过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()https://stackoverflow.com/questions/25168828
复制相似问题