APschedule定時任務

APScheduler是Python的一個定時任務框架,能夠很方便的知足用戶定時執行或者週期執行任務的需求,數據庫

它提供了基於日期date、固定時間間隔interval 、以及相似於Linux上的定時任務crontab類型的定時任務。框架

而且該框架不只能夠添加、刪除定時任務,還能夠將任務存儲到數據庫中,實現任務的持久化。async

簡單介紹

 APScheduler有四種組件及相關說明:函數

      1) triggers(觸發器):觸發器包含調度邏輯,每個做業有它本身的觸發器,用於決定接下來哪個做業會運行,除了他們本身初始化配置外,觸發器徹底是無狀態的。spa

      2)job stores(做業存儲):用來存儲被調度的做業,默認的做業存儲器是簡單地把做業任務保存在內存中,其它做業存儲器能夠將任務做業保存到各類數據庫中,支持MongoDB、Redis、SQLAlchemy存儲方式。當對做業任務進行持久化存儲的時候,做業的數據將被序列化,從新讀取做業時在反序列化。線程

      3) executors(執行器):執行器用來執行定時任務,只是將須要執行的任務放在新的線程或者線程池中運行。看成業任務完成時,執行器將會通知調度器。對於執行器,默認狀況下選擇ThreadPoolExecutor就能夠了,可是若是涉及到一下特殊任務如比較消耗CPU的任務則能夠選擇ProcessPoolExecutor,固然根據根據實際需求能夠同時使用兩種執行器。code

      4) schedulers(調度器):調度器是將其它部分聯繫在一塊兒,通常在應用程序中只有一個調度器,應用開發者不會直接操做觸發器、任務存儲以及執行器,相反調度器提供了處理的接口。經過調度器完成任務的存儲以及執行器的配置操做,如能夠添加。修改、移除任務做業。  blog

    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()
相關文章
相關標籤/搜索