schedule (Python lib) - Как запустить задание за несколько определенных минут часа - PullRequest
0 голосов
/ 14 февраля 2019

Я использую библиотеку schedule для планирования сценариев Python.

То, что я хочу реализовать, - это работа, выполняемая сверху и снизу каждого часа (то есть ... 10:00,10:30, 11:00 ...).

Я пробовал следующее:

  • Когда я использую его как schedule.every(30).minutes.do(job), время запуска задания зависит от того, когда программа запущена (если она запущенав 10:17 он будет работать в 10:47, 11:17 и т. д.), что не то, что мне нужно.

  • Существует также метод schedule.every().hour.at(":30").do(job), но онне охватывает :00 с.

Итак, я ищу идиоматический, или, по крайней мере, аккуратный способ добиться этого с помощью этой библиотеки.Есть ли один?

1 Ответ

0 голосов
/ 15 февраля 2019

Подход состоит в том, чтобы убить последний процесс расписания и начать новый с новым временем.Чтобы указать следующий раз, я реализовал не очень аккуратную функцию.

import schedule

# an arbitrary start time
start = '11:30'


def next_time(start):
    ''' This function gives the next time. eg '13:00'->'13:30', '24:30'->'01:00' '''
    comp = start.split(':')
    if '30' in comp[1]:
        comp[1] = '00'
        comp[0] = str(int(comp[0]) + 1)
    else:
        comp[1] = '30'
    if int(comp[0]) > 24:
        comp[0] = '01'
    return ':'.join(comp)


def job(time_now):
    print("The job has been done!")
    # kill the previous schedule, specified with a tag
    schedule.clear('previous')
    # the new time is calculated by next_time function
    next_point = next_time(time_now)
    # return a new one with the new time for the scheduled job
    return schedule.every().day.at(next_point).do(job, next_point).tag('previous')


# implementing the schedule for first time
schedule.every().day.at(start).do(job, start).tag('previous')


while True:
    schedule.run_pending()
    time.sleep(1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...