zoukankan      html  css  js  c++  java
  • apscheduler定时任务,异常重新执行任务

    from apscheduler.schedulers.blocking import BlockingScheduler
    import datetime
    from apscheduler.events import EVENT_JOB_ERROR, EVENT_JOB_EXECUTED
    
    
    def test_1(a, b):
         print(a, b)
    
    
    def test_2(a, b):
        print('*'*16)
        print(a)
        c = 0
        # 修改c的值,结束异常
        if datetime.datetime(2020, 5, 26, 17, 19, 30) < datetime.datetime.now():
            c = 1
        print(b/c)
     
    def job_listener(Event):
        job = sched.get_job(Event.job_id)
        args = job.args
        # 正常结束任务
        if not Event.exception:
            # 恢复原先的任务定时时间
            sched.reschedule_job(Event.job_id, trigger='cron', hour='00', minute='10', second='00')
            print('*'*20,'成功', '*'*20)
            for job in sched.get_jobs():
                print(job.name)
                print(job.trigger)
        else:
            # 计算当前时间5秒后的时间
            next_datetime = datetime.datetime.now() + datetime.timedelta(seconds=5)
            # 修改出现异常的任务的定时,重新计算下次执行时间,本例为5秒后
            sched.reschedule_job(Event.job_id, trigger='cron', hour=next_datetime.hour, minute=next_datetime.minute, second=next_datetime.second)
            msg = f"jobname={job.name}|jobtrigger={job.trigger}|errcode={Event.code}|exception=[{Event.exception}]|traceback=[{Event.traceback}]|scheduled_time={Event.scheduled_run_time}"
    
    if __name__ == "__main__":
        service = 1
        seach_date_list = 2
        job_defaults = {
            'coalesce': True, # 允许合并任务
            'max_instances': 3
        }
        # 创建定时任务实例
        sched = BlockingScheduler()
        sched.configure(job_defaults=job_defaults)
        # 添加任务1
        sched.add_job(test_1,args=(service, seach_date_list,), trigger='cron',
                      hour='14', minute='37', second='00', id="out_warehouse_order")
        # 添加任务2
        sched.add_job(test_2,args=(service, seach_date_list,), trigger='cron',
                      hour='17', minute='19', second='00', id='sale_after')
        # 创建监听,任务出错和任务正常结束都会执行job_listener函数
        sched.add_listener(job_listener, EVENT_JOB_ERROR | 
                               EVENT_JOB_EXECUTED)
        # 开始定时任务
        sched.start()
  • 相关阅读:
    「题解」洛谷 P1731 [NOI1999]生日蛋糕
    「题解」洛谷 P1063 能量项链
    Log4j2笔记
    基数排序
    会计知识
    归并排序
    CF668 题解
    拉格朗日反演
    [国家集训队]数颜色 / 维护队列 「带修莫队」
    简单的填数「贪心」
  • 原文地址:https://www.cnblogs.com/xshan/p/12966576.html
Copyright © 2011-2022 走看看