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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM