14

我每分钟只运行一次脚本的一部分并想出了这个:

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 并且变量不是已经为假时,我再次运行错误 - 但这看起来很粗糙?

另一方面 - 有没有其他方法可以检查一分钟是否已经过去?也许我让事情变得复杂......

编辑:也许我不够清楚:

  1. 每分钟只运行一次。
  2. 执行时间相差很多秒,但不到 30 秒。

我现在在看timedelta。

4

6 回答 6

23

不要使用这样的分钟;例如,如果时间是 00:00:59,您的代码会认为下一秒已经过了一分钟。

相反,使用类似的东西time.time(),它返回自纪元以来经过的秒数:

def minute_passed(oldepoch):
    return time.time() - oldepoch >= 60

出于同样的原因,这仍然可以相差近一秒钟,但这可能更容易接受。

于 2013-04-14T14:27:38.557 回答
13

您可以使用自纪元以来的秒数来获得以秒为单位的时间,这样您就不必担心分钟数会环绕:

import time
oldtime = time.time()
# check
if time.time() - oldtime > 59:
    print "it's been a minute"
于 2013-04-14T14:27:18.367 回答
1

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
于 2013-04-14T14:29:37.943 回答
0

使用time.sleep

from time import sleep

while True:
    # do something
    sleep(60)
于 2013-04-14T14:26:20.267 回答
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()

这对我来说现在非常好 - 每分钟只运行一次 - 在这里睡觉或任何事情对我来说都是一个糟糕的选择,因为每个循环的执行时间是不可靠的。

于 2013-04-14T15:41:49.823 回答
0

我遇到了完全相同的问题,我想我找到了解决方案:

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

你可以删除打印语句,我把它们放在那里只是为了看看它是否有效,希望它是你正在寻找的。

于 2015-09-08T12:36:06.510 回答