APScheduler是Python的一個定時任務框架,可以很方便的滿足用戶定時執行或者周期執行任務的需求,
它提供了基於日期date、固定時間間隔interval 、以及類似於Linux上的定時任務crontab類型的定時任務。
並且該框架不僅可以添加、刪除定時任務,還可以將任務存儲到數據庫中,實現任務的持久化。
簡單介紹
APScheduler有四種組件及相關說明:
1) triggers(觸發器):觸發器包含調度邏輯,每一個作業有它自己的觸發器,用於決定接下來哪一個作業會運行,除了他們自己初始化配置外,觸發器完全是無狀態的。
2)job stores(作業存儲):用來存儲被調度的作業,默認的作業存儲器是簡單地把作業任務保存在內存中,其它作業存儲器可以將任務作業保存到各種數據庫中,支持MongoDB、Redis、SQLAlchemy存儲方式。當對作業任務進行持久化存儲的時候,作業的數據將被序列化,重新讀取作業時在反序列化。
3) executors(執行器):執行器用來執行定時任務,只是將需要執行的任務放在新的線程或者線程池中運行。當作業任務完成時,執行器將會通知調度器。對於執行器,默認情況下選擇ThreadPoolExecutor就可以了,但是如果涉及到一下特殊任務如比較消耗CPU的任務則可以選擇ProcessPoolExecutor,當然根據根據實際需求可以同時使用兩種執行器。
4) schedulers(調度器):調度器是將其它部分聯系在一起,一般在應用程序中只有一個調度器,應用開發者不會直接操作觸發器、任務存儲以及執行器,相反調度器提供了處理的接口。通過調度器完成任務的存儲以及執行器的配置操作,如可以添加。修改、移除任務作業。
APScheduler提供了多種調度器,可以根據具體需求來選擇合適的調度器,常用的調度器有:
BlockingScheduler:適合於只在進程中運行單個任務的情況,通常在調度器是你唯一要運行的東西時使用。
BackgroundScheduler: 適合於要求任何在程序后台運行的情況,當希望調度器在應用后台執行時使用。
AsyncIOScheduler:適合於使用asyncio框架的情況
GeventScheduler: 適合於使用gevent框架的情況
TornadoScheduler: 適合於使用Tornado框架的應用
TwistedScheduler: 適合使用Twisted框架的應用
QtScheduler: 適合使用QT的情況
基本使用
1.安裝
pip install apscheduler
2. 使用
定時執行函數test_job,每隔5秒鍾執行一次
from apscheduler.schedulers.blocking import BlockingScheduler import time def test_job(): print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))) test_job() scheduler = BlockingScheduler() scheduler.add_job(test_job,'interval',seconds=5,id='test_job') scheduler.start()
例2:
每周星期一到星期五,下午13:00-19:00每分每4秒執行一次
import datetime import time from apscheduler.schedulers.blocking import BlockingScheduler def job_function(): print("Hello World" + " " + str(datetime.datetime.now())) if __name__ == '__main__': print('start to do it') sched = BlockingScheduler() sched.add_job(job_function, 'cron', day_of_week='mon-fri', hour='13-19', minute="*", second="*/4") # 每4秒執行一次 sched.start()