Как запустить код Python за 30 секунд до каждой 5-й минуты - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть программа на Python, которую я хочу выполнять ровно за 30 секунд до каждой 5-й минуты, и мне нужно работать только в течение 30 секунд.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Вместо того, чтобы зацикливаться и тестировать, если это правильное время снова и снова, лучше рассчитать количество времени, необходимое для ожидания и ожидания до тех пор, чтобы процессор мог выключиться и заняться другими делами.Для этого мы по-прежнему используем модуль 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)

0 голосов
/ 27 сентября 2018

Если вы используете этот код независимо, я бы посоветовал вам взглянуть на следующие статьи Аарона: superuser.com , apple.stackexchange.com или askubuntu.com .

Однако, если вы собираетесь написать это на Python, вы можете использовать модуль datetime и найти истекшее время.

from datetime import datetime
import time


def your_function(t1):
    i = 0
    # For the next 30 seconds, run your function
    while (datetime.now() - t1).seconds =< 30:
        i += 1
        print(i)
        time.sleep(1)


# Run indefintely
while True:

    # Record the current time
    t1 = datetime.now()
    while t1:

        # Find the elapsed time in seconds 
        # If the difference is 270 seconds (4 minutes and 30 seconds)
        if (datetime.now()-t1).seconds == 270:
                your_function(t1)

            # Remove t1 and start at the top of the loop again
            t1 = None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...