【问题标题】:APScheduler:Trigger New job after completion of previous jobAPScheduler:完成前一个作业后触发新作业
【发布时间】:2019-03-05 06:44:50
【问题描述】:

我正在使用 APScheduler(3.5.3) 运行三个不同的作业。我需要在第一份工作完成后立即触发第二份工作。另外我不知道第一份工作的完成时间。我已将触发器类型设置为 cron 并计划每 2 小时运行一次。

我克服这个问题的一种方法是在每个作业结束时安排下一个作业。有没有其他方法可以通过APScheduler来实现?

【问题讨论】:

    标签: cron python-3.6 apscheduler


    【解决方案1】:

    这可以使用scheduler events 来实现。查看这个改编自文档的简化示例(未经测试,但应该可以):

    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)
    

    这假设您不知道作业的 ID,而是通过名称来识别它们。如果你知道 ID,逻辑会更简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-15
      • 2023-03-18
      • 2019-09-02
      • 1970-01-01
      • 1970-01-01
      • 2022-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多