APschedule定時任務


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

 


免責聲明!

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



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