我每分钟运行一次脚本的一部分并想出了这个:
def minutePassed(oldminute):
currentminute = time.gmtime()[4]
if ((currentminute - oldminute) >= 1) or (oldminute == 59 and currentminute >= 0):
return True
else:
return False
这里的问题是,如果分钟是59,它每次都会运行,直到过去那段时间 - 这对我来说并不是一件好事。但我仍然不喜欢它发生!
我现在想到了这样的事情:
def minutePassed(oldminute):
currentminute = time.gmtime()[4]
if ((currentminute - oldminute) >= 1) or (oldminute == 59 and currentminute >= 0 and ran == false):
ran = True
return True
else:
return False
然后在脚本的另一部分,当分钟是!= 59并且变量不是假的时候我再次变为假 - 但这看起来很粗糙?
另一方面 - 有没有其他方法来检查是否已经过了一分钟?也许我让事情变得复杂......
编辑:也许我不够清楚:
我现在正在看timedelta。
答案 0 :(得分:16)
不要像这样的分钟工作;如果时间是,例如00:00:59,您的代码将相信一分钟已经过了下一秒。
相反,使用time.time()
之类的东西,它返回自纪元以来经过的秒数:
def minute_passed(oldepoch):
return time.time() - oldepoch >= 60
出于同样的原因,这仍然可能会被关闭几秒钟,但这可能更容易接受。
答案 1 :(得分:7)
您可以使用自纪元以来的秒数来获取以秒为单位的时间,这样您就不必担心分钟缠绕:
import time
oldtime = time.time()
# check
if time.time() - oldtime > 59:
print "it's been a minute"
答案 2 :(得分:0)
使用time.sleep:
from time import sleep
while True:
# do something
sleep(60)
答案 3 :(得分:0)
我认为您会发现在time
模块中使用time()
功能会更加容易,该功能会返回自'纪元以来经过的秒数。
import time
oldtime = time.time()
def minutePassed(oldtime):
currenttime = time.time()
if currenttime - oldtime > 60 and ran == False:
ran = True
return True
else:
return False
答案 4 :(得分:0)
我在timedelta上并没有太大的成功,所以我选择了以前粗略的想法:
def minutePassed(oldminute):
currentminute = time.gmtime()[4]
if ((currentminute - oldminute) >= 1) or (oldminute == 59 and currentminute == 0):
return True
else:
return False
然后在剧本中:
while True:
dosomething()
if minutePassed(time.gmtime(lastrun)[4]):
domore
lastrun = time.time()
这对我来说完全没问题 - 只运行一次 - 分钟 - 因为每个循环的执行时间不可靠,所以我在这里睡觉或任何事情都是不好的选择。
答案 5 :(得分:-1)
我遇到了完全相同的问题,我想我找到了一个解决方案:
import time
oldtime = time.time()
print oldtime
while oldtime + 60 != time.time():
if oldtime + 3 == time.time():
print "60 secs passed"
print time.time()
break
您可以删除打印报表,我将它们放在那里只是为了看它是否有效,希望它是您正在寻找的。 p>