Рассчитать следующую запланированное время на основе SPEC CRON

StackOverflow https://stackoverflow.com/questions/4610904

Вопрос

Какой эффективный способ рассчитать следующее время выполнения мероприятия, учитывая текущее время и CRON SPECT?

Я ищу что-то другое, чем «петлю через каждую проверку минут, если он соответствует спецификации».

Примеры спецификации могут быть:

  • Каждый месяц, на 1 и 15 в 15:01
  • На 10,20 30,40,50 минуты прошло час каждый час

Код Python будет прекрасен, но PSuedo Code или описание высокого уровня также будет оценено.

Обновление] Предположим, что Spec уже проанализируется и находится в некоторых разумных формате.

Это было полезно?

Решение

Просто глядя на это, я думаю, вам нужно:

  • Разбираться в Chron Spec до пяти массивов, содержащих приемлемые значения для каждого поля;
  • «Теперь» к значению для каждого поля;
  • За по порядку минуты, час, {день месяца или дни недели}, месяц года: найдите наименьшее значение массива, которое соответствует или превышает текущее значение, исправляя для нести.

Я не знаю, как обрабатывать дни недели и день месяца одновременно; Я уверен, что есть способ, но с другой стороны, я не думаю, что когда-либо видел спецификацию, который на самом деле указал оба. Я думаю, что будет достаточно написать обработчик и бросить ошибку, если вы получите оба.

Редактировать: по-видимому, если указывается день недели и дни месяцев, он должен огорчиться на обе - то есть, если правило - это 15, среда, он будет огонь на каждом 15-м а также каждую среду.

Пакет Croniter делает то, что вы хотите:

import croniter
import datetime

now = datetime.datetime.now()
sched = '1 15 1,15 * *'    # at 3:01pm on the 1st and 15th of every month
cron = croniter.croniter(sched, now)

for i in range(4):
    nextdate = cron.get_next(datetime.datetime)
    print nextdate

принты

2011-01-15 15:01:00
2011-02-01 15:01:00
2011-02-15 15:01:00
2011-03-01 15:01:00

Хотя было бы неплохо, если бы он был написан как фактический итератор. Может быть, у меня есть мой следующий проект ;-)

Другие советы

Позже Является ли библиотека JavaScript, которая делает только это. Он способен разбирать выражение Cron, а затем рассчитать будущие вхождения графика. Это алгоритм не очень фантазии, но это делает работу. Может быть стоит взглянуть.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top