您好,登錄后才能下訂單哦!
這篇文章給大家介紹Python定時任務框架APScheduler基礎知識有哪些,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
Python定時任務框架APScheduler基礎知識分享,APScheduler十分方便,課基于日期、固定時間間隔以及crontab類型任務在主程序的運行過程中快速增加新作業或刪除舊作業,若把作業存儲在數據庫中作業的狀態會被保存,當調度器重啟時不必重新添加作業,作業會恢復原狀態繼續執行。
一、定時任務框架APScheduler是什么?
在實際開發中會碰到重復性或周期性的任務,如每天定時爬取某個網站的數據、一定周期定時運行代碼訓練模型等,類似這類的任務通常需要手動來進行設定或調度,以便其能夠在設定好的時間內運行。
在Windows上可以通過計劃任務來手動實現,而在Linux系統上往往會用到更多關于 crontab 的相關操作。但手動管理并不是一個很好的選擇,如果需要有十幾個不同的定時任務需要管理,每次通過人工來進行干預有些笨拙,這時候就真的是“人工智能”了。
將這些定時任務的調度代碼化才能夠從這種手動管理的純人力操作中解脫出來。在Python 生態中對于定時任務的一些操作:
1、schedule:第三方模塊,該模塊適合比較輕量級的一些調度任務,但卻不適用于復雜時間的調度
2、APScheduler:第三方定時任務框架,是對Java第三方定時任務框架 Quartz 的模仿與移植,能提供比 schedule 更復雜的應用場景,并且各種組件都是模塊化,易于使用與二次開發。
3、Celery Beat:屬于 celery 這分布式任務隊列第三方庫下的一個定時任務組件,如果使用需要配合 RabbitMQ 或 Redis 這類的消息隊列套件,需要花費一定的時間在環境搭建上,但在高版本中已經不支持 Windows。
為了滿足能夠相對復雜的時間條件,又不需要在前期的環境搭建上花費很多時間的前提下,選擇 APScheduler 來對調度任務或定時任務進行管理是個性價比極高的選擇。
二、APScheduler 概念與組件
這一框架的簡單易用。在使用 APScheduler 之前,需要對這個框架的一些概念簡單了解,主要有那么以下幾個:觸發器、任務持久化、執行器、調度器。
(一)觸發器(trigger)
觸發器用以觸發定時任務的組件,在 APScheduler 中主要是指時間觸發器,并且主要有三類時間觸發器可供使用:
date:日期觸發器。日期觸發器主要是在某一日期時間點上運行任務時調用,是 APScheduler 里面最簡單的一種觸發器。通常也適用于一次性的任務或作業調度。
interval:間隔觸發器。間隔觸發器是在日期觸發器基礎上擴展了對時間部分,如時、分、秒、天、周這幾個部分的設定。用以對重復性任務進行設定或調度的一個常用調度器。設定了時間部分之后,從起始日期開始會按照設定的時間去執行任務。
cron:cron 表達式觸發器。cron 表達式觸發器就等價于 Linux 上的 crontab,它主要用于更復雜的日期時間進行設定。但需要注意的是APScheduler 不支持 6 位及以上的 cron 表達式最多只支持到5位。
(二)、任務持久化(job stores)
任務持久化主要是用于將設定好的調度任務進行存儲,即便是程序因為意外情況,如斷電、電腦或服務器重啟時,只要重新運行程序時APScheduler 就會根據對存儲好的調度任務結果進行判斷,如果出現已經過期但未執行的情況會進行相應的操作。APScheduler為提供了多種持久化任務的途徑,默認是使用 memory 也就是內存的形式,但內存并不是持久化最好的方式。最好的方式則是通過像數據庫這樣的載體來將定時任務寫入到磁盤當中,只要磁盤沒有損壞就能將數據給恢復。APScheduler支持的且常用的數據庫主要有:
sqlalchemy 形式的數據庫,這里就主要是指各種傳統的關系型數據庫,如MySQL、PostgreSQL、SQLite 等。
mongodb 非結構化的 Mongodb 數據庫,該類型數據庫經常用于對非結構化或版結構化數據的存儲或操作,如 JSON。
redis 內存數據庫,通常用作數據緩存來使用,當然通過一些主從復制等方式也能實現當中數據的持久化或保存。
通常可以在創建 Scheduler 實例時創建,或是單獨為任務指定。配置的方式相對簡單,只需要指定對應的數據庫鏈接即可。
(三)執行器(executor)
執行器顧名思義就是執行任務的對象,在計算機內通常要么是 CPU 調度任務,要么是單獨維護一個線程來運行任務。所以 APScheduler 里的執行器通常就是 ThreadPoolExecutor 或 ProcessPoolExecutor 這樣的線程池和進程池兩種。當然如果是和協程或異步相關的任務調度,還可以使用對應的 AsyncIOExecutor、TwistedExecutor 和 GeventExecutor 三種執行器。
(四)調度器(scheduler)
調度器的選擇主要取決于你當前的程序環境以及 APScheduler 的用途。根據用途的不同,APScheduler 又提供了以下幾種調度器:
BlockingScheduler:阻塞調度器,當程序中沒有任何存在主進程之中運行東西時,就則使用該調度器。
BackgroundScheduler:后臺調度器,在不使用后面任何的調度器且希望在應用程序內部運行時的后臺啟動時才進行使用,如當前你已經開啟了一個Django 或 Flask 服務。
AsyncIOScheduler:AsyncIO 調度器,如果代碼是通過 asyncio 模塊進行異步操作,使用該調度器。
GeventScheduler:Gevent 調度器,如果代碼是通過 gevent 模塊進行協程操作,使用該調度器
TornadoScheduler:Tornado 調度器,在 Tornado 框架中使用
TwistedScheduler:Twisted 調度器,在基于 Twisted 的框架或應用程序中使用
QtScheduler:Qt 調度器,在構建 Qt 應用中進行使用。
通常情況下如果不是和 Web 項目或應用集成共存,那么往往都首選 BlockingScheduler 調度器來進行操作,它會在當前進程中啟動相應的線程來進行任務調度與處理;反之,如果是和 Web 項目或應用共存,那么需要選擇 BackgroundScheduler 調度器,因為它不會干擾當前應用的線程或進程狀況。基于對以上的概念和組件認識,就能基本上摸清 APScheduler 的運行流程:
1、設定調度器用以對任務的調度與安排進行全局統籌
2、對相應的函數或方法上設定相應的觸發器,并添加到調度器中
3、如有任務持久化需要則需要設定對應的持久化層,否則默認使用內存存儲任務
4、當觸發器被觸發時,就將任務交由執行器進行執行
關于Python定時任務框架APScheduler基礎知識有哪些就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。