Используйте модуль sched для запуска в данный момент - PullRequest
7 голосов
/ 06 декабря 2011

Я работаю над сценарием Python, который должен выполняться между двумя заданными временами. Я должен использовать модуль build in sched, так как этот сценарий должен иметь возможность запускаться непосредственно на любой машине с Python 2.7, чтобы сократить время настройки. (ТАК КРОНА НЕ ВАРИАНТ)

Несколько переменных определяют настройки времени запуска, здесь set_timer_start=0600 и set_timer_end=0900 записаны в HHMM. Я могу остановить сценарий в нужное время.

Я не знаю точно, как sched работает (страница документации Python не имеет для меня особого смысла), но, насколько я понимаю, она запускается в дату / время (эпоху), пока я хочу запускать в определенное время (HHMM).

Может ли кто-нибудь дать мне пример (или ссылку) о том, как использовать планировщик и, возможно, рассчитать дату / время следующего запуска?

1 Ответ

11 голосов
/ 06 декабря 2011

Если я правильно выполнил ваши требования, вероятно, вам нужен цикл, который будет повторно вводить задачу в очередь каждый раз, когда она будет выполняться. Что-то вроде:

# This code assumes you have created a function called "func" 
# that returns the time at which the next execution should happen.
s = sched.scheduler(time.time, time.sleep)
while True:
    if not s.queue():  # Return True if there are no events scheduled
        time_next_run = func()
        s.enterabs(time_next_run, 1, <task_to_schedule_here>, <args_for_the_task>)
    else:
        time.sleep(1800)  # Minimum interval between task executions

Однако использование планировщика - IMO - излишнее. Использование объектов datetime может быть достаточным, например, базовая реализация будет выглядеть так:

from datetime import datetime as dt
while True:
    if dt.now().hour in range(start, stop):  #start, stop are integers (eg: 6, 9)
        # call to your scheduled task goes here
        time.sleep(60)  # Minimum interval between task executions
    else:
        time.sleep(10)  # The else clause is not necessary but would prevent the program to keep the CPU busy.

НТН!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...