如何调度spark程序_如何定时,周期性的运行程序?Python APScheduler实现任务灵活调度...
在我們的開發工作中,時常會有這樣的開發需求,如需要定時或者周期性的運行某些程序,因此經常用到一些定時服務,如在 Linux系統中使用 Crond 服務實現程序的定時運行。
在 Python中也有這樣的一個模塊,那就是 APScheduler,它是基于Quartz 的一個 Python定時任務框架,實現了 Quartz的全部功能,使用起來十分簡單、高效。其提供了基于日期、固定時間間隔以及 Crontab類型的任務,并且支持持久化任務。同時也提供了不同的存儲機制,可以方便與數據庫等第三方的外部持久化存儲進行協同工作。它主要包含了四種組件:
- Triggers:任務觸發器,任務以何種方式觸發。
- Job stores:任務存儲器,持久存儲任務。
- Executors:任務執行器,執行任務的模塊。
- Schedulers:任務調度器,通過配置 trigger、job store、executor等實現對任務的增刪改查等調度控制。
APScheduler安裝
安裝過程如下:
任務存儲器 Job stores
Job stores 存儲被調度的任務,默認的任務存儲是簡單地把任務保存在內存(MemoryJobStore)中,其他的任務存儲形式是將任務保存在數據庫中。一個任務的數據將在保存在持久化任務存儲時被序列化,在加載時被反序列化。調度器不能分享同一個任務存儲。job store支持主流的存儲機制:redis、mongodb、內存等等。
以 MongoDBJobStore為例,實例如下:
執行器 Executors
Executors 處理任務的運行,他們通常通過在任務中提交制定的可調用對象到一個線程或者進城池來進行,當任務完成時,執行器將會通知調度器。
調度器 Schedulers
通常在應用只有一個調度器,調度器提供了處理任務存儲、調度器、觸發器合適的接口。配置任務存儲和執行器可以在調度器中完成,例如添加、修改和移除任務。常用的調度器如下:
- BlockingScheduler:僅可用在當前你的進程之內,與當前的進行共享計算資源,適合于只在進程中運行單個任務的情況,通常在調度器是你唯一要運行的東西時使用。
- BackgroundScheduler: 在后臺運行調度,不影響當前的系統計算運行,適合于要求任何在程序后臺運行的情況,當希望調度器在應用后臺執行時使用。
- AsyncIOScheduler: 如果當前系統中使用了async module,則需要使用異步的調度器,適合于使用asyncio框架的情況。
- GeventScheduler: 如果使用了 gevent,則需要使用該調度,適合于使用 gevent框架的情況。
- TornadoScheduler: 如果使用了Tornado, 則使用當前的調度器,適合于使用 Tornado框架的應用。
- TwistedScheduler:Twister應用的調度器,適合使用Twisted框架的應用。
- QtScheduler: Qt的調度器,適合使用QT的情況。
觸發器種類Triggers
Triggers 包含調度邏輯,每一個任務有它自己的觸發器,用于決定接下來哪一個任務運行,根據 Triggers 中定義的時間點,執行頻率,時間區間等等參數設置。除了他們自己初始配置以外,觸發器完全是無狀態的,觸發器有如下幾種:
- date:一次性任務,即只執行一次任務。
- interval:循環任務,即按照時間間隔執行任務。
- cron:定時任務,即在每個時間段執行任務。
interval 觸發器實例
指定觸發器為 interval,循環任務,即按照 時間間隔 執行任務。
參數如下
- year (int|str) :表示四位數的年份,如2019年
- month (int|str) :表示取值范圍為1-12月。
- day (int|str) :表示取值范圍為1-31日。
- week (int|str) :一年中的第幾周 (1-53)。
- day_of_week (int|str) :表示一周中的第幾天(0-6)。
- hour (int|str):表示取值范圍為0-23時。
- minute (int|str) :表示取值范圍為0-59分。
- second (int|str) :表示取值范圍為0-59秒。
- start_date (datetime|str) :表示開始時間。
- end_date (datetime|str) :表示結束時間。
- timezone (datetime.tzinfo|str) :表示時區取值。
如上,我們設定 每2秒執行一次,運行結果如下:
date 觸發器實例
指定觸發器為 date,一次性任務,即只執行一次任務。
如上,我們設定任務 延時五秒 后執行,運行結果如下:
cron 觸發器實例
指定觸發器為 cron,定時任務,即在每個時間段執行任務。
參數如下
- year (int|str) :表示四位數的年份,如2019年
- month (int|str) :表示取值范圍為1-12月。
- day (int|str) :表示取值范圍為1-31日。
- week (int|str) :一年中的第幾周 (1-53)。
- day_of_week (int|str) :表示一周中的第幾天(0-6)。
- hour (int|str):表示取值范圍為0-23時。
- minute (int|str) :表示取值范圍為0-59分。
- second (int|str) :表示取值范圍為0-59秒。
- start_date (datetime|str) :表示開始時間。
- end_date (datetime|str) :表示結束時間。
- timezone (datetime.tzinfo|str) :表示時區取值。
如上,我們設定在2、4月、7~9月,每天晚上22點21分執行一次任務,運行結果如下:
移除、暫停/恢復任務
總結
以上是生活随笔為你收集整理的如何调度spark程序_如何定时,周期性的运行程序?Python APScheduler实现任务灵活调度...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NDK 开发实战 - 封装 java 层
- 下一篇: python如何处理数据_python数