轉載自:https://www.cnblogs.com/mswei/p/10006076.html
最近需要寫個日更新的程序,用time.sleep()不能很好的控制任務的執行時間
於是,就使用了python的任務調度模塊apscheduler,這個模塊功能真的是很強大
具體的就不多講了
將任務程序都設置好,之後,任務只在第一天執行,後面兩天都沒有執行
通過仔細檢查log之後,發現了異常
正常的本次運行完,下次的任務執行時間log爲:
144 - 2018-11-23 01:12:10,230 - INFO - Job "SubmitData (trigger: interval[1 day, 0:00:00], next run at: 2018-11-24 01:00:00 CST)" executed successfully
而沒有執行任務的log爲:
2018-11-22 00:00:04,084 base.py[line:120] run_job WARNING Run time of job "start (trigger: interval[1 day, 0:00:00], next run at: 2018-11-23 00:00:01 CST)" was missed by 0:00:03.061840
這個log的意思是:距離下次運行時間,錯過了3秒,所有第二次就沒有執行任務
解決方法:
scheduler.add_job(start, 'interval', days=1, coalesce=True, misfire_grace_time=3600, start_date='2018-11-23 00:00:01', end_date='2019-12-30 11:59:59')
在add_job()中添加參數:
misfire_grace_time: 主要就是爲了解決這個was missed by 這個報錯,添加允許容錯的時間,單位爲:s
coalesce:如果系統因某些原因沒有執行任務,導致任務累計,爲True則只運行最後一次,爲False 則累計的任務全部跑一遍