• 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()
  • 相关阅读:
    打开安装 好的Microsoft Dynamics CRM 4.0 报错误为 Caller does not have enough privilege to set CallerOriginToken to the specified value 的解决办法
    基于 Windows Server 2008 的计算机对 Microsoft Dynamics CRM 4.0 的支持
    Microsoft Dynamics CRM 4.0 如何添加自定义按钮
    Microsoft Dynamics CRM 4.0 Plugin 取值,赋值,查询
    C# 中的 enum(枚举) 类型使用例子
    vue事件的绑定
    表单验证2
    node中模块
    node模块的引入
    node中的读文件
  • 原文地址:https://www.cnblogs.com/xshan/p/12966576.html
Copyright © 2020-2023  润新知