睡眠直至下一个 15 分钟每小时间隔(00:00、00:15、00:30、00:45)

Fla*_*lyn 3 python time python-2.7

我需要我的脚本休眠直到下一个 15 分钟的每小时间隔,例如整点、一刻钟、半点半和一刻钟。

\n\n

它看起来像这样

\n\n
While True:\n    //do something\n    sleepy_time = //calculate time to next interval\n    time.sleep(sleepy_time)\n
Run Code Online (Sandbox Code Playgroud)\n\n

您可以编写一系列 if 语句来检查当前经过一小时的分钟数,然后执行 \xe2\x80\x98if current < 15\xe2\x80\x99 和 \xe2\x80\x98if current < 30\xe2\x80\ x99 等,但这看起来很混乱且效率低下。

\n\n

编辑:基于@martineau的答案,这是我使用的代码。

\n\n
import datetime, time\n\nshouldRun = True\nif datetime.datetime.now().minute not in {0, 15, 30, 45}:\n    shouldRun = False\n# Synchronize with the next quarter hour.\nwhile True:\n    if shouldRun == False:\n        current_time = datetime.datetime.now()\n        seconds = 60 - current_time.second\n        minutes = current_time.minute + 1\n        snooze = ((15 - minutes%15) * 60) + seconds\n        print(\'minutes:\', minutes, \'seconds\', seconds, \' sleep({}):\'.format(snooze))\n        localtime = time.asctime( time.localtime(time.time()))\n        print("sleeping at " + localtime)\n        time.sleep(snooze)  # Sleep until next quarter hour.\n        shouldRun = True\n    else:\n        localtime = time.asctime( time.localtime(time.time()))\n        print("STUFF HAPPENS AT " + localtime)\n        shouldRun = False\n
Run Code Online (Sandbox Code Playgroud)\n\n

他的答案与此之间的区别在于,每个间隔仅运行一次 else 块,然后如果该分钟仍在 0、15、30、45 间隔,则会计算额外的秒数以添加到睡眠分钟数中,直到下一个间隔。

\n

Joe*_*don 5

您可以使用datetime...来实现这一点

调用datetime.datetime.now()将返回 a datetime,您可以使用 获取当前minute值。hour.minute

minutes一旦我们有了过去的数量hour,我们就可以得到下一个区间的modulo 15数量。minutes15

从这里,只需调用time.sleep()该次数minutes6060分钟内的秒数)即可。

其代码可能类似于:

import datetime, time

minutesToSleep = 15 - datetime.datetime.now().minute % 15
time.sleep(minutesToSleep * 60)
print("time is currently at an interval of 15!")
Run Code Online (Sandbox Code Playgroud)