Вместо того, чтобы зацикливаться и тестировать, если это правильное время снова и снова, лучше рассчитать количество времени, необходимое для ожидания и ожидания до тех пор, чтобы процессор мог выключиться и заняться другими делами.Для этого мы по-прежнему используем модуль datetime
и немного математики.
from datetime import datetime as dt
from time import sleep
#Calculating sleep interval
t = dt.now()
#seconds in the hour
sec = t.second + t.minute*60
#seconds since the last 5 min interval
sec = sec % 300
#until the next 5 min interval
sec = 300 - sec
#30 sec before that
sec = sec - 30
#if negative we're within 30 sec of 5 minute interval so goto next one
if sec < 0:
sec = sec + 300
sleep(sec)
while True: #loop forever
#with a little re-arranging and boolean math, this can all be condensed to:
t = dt.now()
s = (t.second + 60*t.minute) % 300
sleep(270 - s + 300 * (s >= 270))
#yourFunction()
Для очень простых случаев это должно работать.Если в какой-то момент произойдет сбой вашей программы, или если компьютер перезагрузится, или множество других причин, было бы лучше использовать что-то встроенное в ОС, которое автоматически перезапустит программу и может справиться с другими условиями, такими каккак установка таймеров сна или только выполнение, если в систему вошел конкретный пользователь. В Windows это планировщик задач, в Linux это обычно cron, и запускается OSX (по крайней мере, согласно developer.apple.com)