APScheduler: запуск новой работы после завершения предыдущей работы - PullRequest
0 голосов
/ 05 марта 2019

Я использую APScheduler (3.5.3) для запуска трех разных заданий.Мне нужно вызвать вторую работу сразу после завершения первой работы.Также я не знаю время завершения первого задания. Я установил тип триггера как cron и планировал запускать его каждые 2 часа.

Один из способов преодолеть это - запланировать следующее задание в конце каждогоработа.Есть ли другой способ добиться этого с помощью APScheduler?

1 Ответ

0 голосов
/ 16 марта 2019

Это может быть достигнуто с помощью событий планировщика .Посмотрите на этот упрощенный пример, адаптированный из документации (не проверено, но должно работать):

def execution_listener(event):
    if event.exception:
        print('The job crashed')
    else:
        print('The job executed successfully')
        # check that the executed job is the first job
        job = scheduler.get_job(event.job_id)
        if job.name == 'first_job':
            print('Running the second job')
            # lookup the second job (assuming it's a scheduled job)
            jobs = scheduler.get_jobs()
            second_job = next((j for j in jobs if j.name == 'second_job'), None)
            if second_job:
                # run the second job immediately
                second_job.modify(next_run_time=datetime.datetime.utcnow())
            else:
                # job not scheduled, add it and run now
                scheduler.add_job(second_job_func, args=(...), kwargs={...},
                                  name='second_job')

scheduler.add_listener(my_listener, EVENT_JOB_EXECUTED | EVENT_JOB_ERROR)

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

...