[英]Python Check if a Minute has passed
我每分钟只运行一次脚本的一部分,并想出了这个:
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。
不要像这样的分钟工作; 如果时间是,例如00:00:59,您的代码将相信一分钟已经过了下一秒。
相反,使用类似time.time()
东西,它返回自纪元以来传递的秒数:
def minute_passed(oldepoch):
return time.time() - oldepoch >= 60
由于同样的原因,这仍然可能会被关闭几秒钟,但这可能更容易被接受。
您可以使用自纪元以来的秒数以秒为单位获得时间,这样您就不必担心会议时间:
import time
oldtime = time.time()
# check
if time.time() - oldtime > 59:
print "it's been a minute"
使用time.sleep :
from time import sleep
while True:
# do something
sleep(60)
我想你会发现在time
模块中使用time()
函数要容易得多,它会返回自'epoch'以来经过的秒数。
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
我在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()
这对我来说完全没问题 - 只运行一次 - 分钟 - 睡觉或任何事情对我来说都是一个糟糕的选择,因为每个循环的执行时间都不可靠。
我有完全相同的问题,我想我找到了一个解决方案:
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
你可以删除打印语句,我把它们放在那里只是为了看它是否有效,希望它是你正在寻找的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.