Python定時任務實現(xiàn)方案
我正在從0到1打造一個開源的接口測試平臺, 也在編寫一套與之對應的完整教程,希望大家多多支持。
1、定時任務
定時任務,顧名思義: 定時執(zhí)行的任務,可以是一段bash命令,也可以是一個腳本文件。通常用于我們需要在特定時刻做事情。
舉個例子: 每晚8點執(zhí)行全業(yè)務場景接口自動化回歸測試,又或者每隔20分鐘去你家QQ農(nóng)場偷菜!
2、Python的定時任務
如果是大中型公司,一定有對應的平臺讓大家接入。一般這樣的平臺的名字或者描述都是: 分布式任務調(diào)度平臺這樣的。再不濟還有jenkins滿足我們的需求~
想起博主以前"小時候"(剛工作的時候),公司既沒有用jenkins
,也沒有這樣的大平臺可以接入。我是怎么做定時任務的呢?
來看一段代碼:
import time from datetime import datetime def func(): # 這個是定時任務要執(zhí)行的ui/接口自動化方法 pass def main(): while True: # 獲取當前時間 now = datetime.now() if now.hour == 20 and now.minute == 0: # 當時間到達晚上8點0分,我們就開始跑自動化任務啦 print("任務開始執(zhí)行") func() time.sleep(60) if __name__ == "__main__": main()
不知道現(xiàn)在是否還有人依然用著這樣的方式定時執(zhí)行自動化測試,既然都2021年了,那咱們還是先進點吧。那么定時任務在Python
中要怎么做呢?接著看。
2.1 幾種常見的方案
2.1.1 schedule
如果你只是上面提到的簡單訴求,那我建議直接使用schedule
庫。這個庫我個人感覺是小學生版本的升級版,對于我那種局限的sleep
任務做了一些擴展:
- 支持了按周期執(zhí)行任務
- 執(zhí)行時間閱讀起來更人性化
- 還支持星期X執(zhí)行
安裝scheduler
pip install schedule
官網(wǎng)給出的例子
import schedule import time # 定義一個執(zhí)行方法 def job(): print("I'm working...") # 每10分鐘執(zhí)行一次job schedule.every(10).minutes.do(job) # 每小時執(zhí)行一次job schedule.every().hour.do(job) # 每天10:30執(zhí)行job schedule.every().day.at("10:30").do(job) # 每個星期一執(zhí)行一次 schedule.every().monday.do(job) # 每個星期三的13:15執(zhí)行一次 schedule.every().wednesday.at("13:15").do(job) # 在每分鐘的17秒執(zhí)行一次 schedule.every().minute.at(":17").do(job) while True: # 進入schedule循環(huán) schedule.run_pending() time.sleep(1)
可以看出,api十分簡單,語義也很清晰?;究梢詽M足我們的需求了~如果我們只是要定時去做某些事情的話,我想這個庫非常human
。
2.1.2 Jenkins
這個工具相比大家都有所了解吧~jenkins
是一個比較強大的軟件了,它可以打通git/svn
,也支持定時任務等。有著豐富的插件,比如郵件,是一套完整的CI/CD
解決方案。對于任務的執(zhí)行結(jié)果的記錄,也是可追溯的。估計唯一的缺點就是,引入了額外的系統(tǒng)??赡鼙旧砦抑皇且粋€自動化測試框架,現(xiàn)在卻要搭建一套jenkins
。
如果大家有代碼改動->執(zhí)行定時任務類似的需求,又需要完善的權(quán)限控制系統(tǒng)的話,那jenkins會是你的不二選擇。
2.1.3 Celery
我對這家伙了解的不太多,但python+celery
仿佛成了一個固定搭配。不知道我理解的對不對:
celery
是一個任務隊列,你可以制定好任務執(zhí)行的規(guī)則,放入隊列中,會有專門的消費端來幫你執(zhí)行這些任務。
說到這里就不得不提到持久化了~
2.2 題外話之持久化
什么是持久化呢?通俗的講,就是瞬時數(shù)據(jù)(比如內(nèi)存中的數(shù)據(jù),是不能永久保存的)持久化為持久數(shù)據(jù)(比如持久化至數(shù)據(jù)庫中,能夠長久保存)
我們可以把數(shù)據(jù)放到文件里,也可以放到數(shù)據(jù)庫(實際上也是磁盤里)進行持久性保存。
這樣做的目的: 數(shù)據(jù)可以存儲,下次也還能拿到這些數(shù)據(jù)。這里面的內(nèi)容太多了,打算后面再開一節(jié)來講。
我們在Python
里面的變量啊,這些數(shù)據(jù)都是存放在內(nèi)存當中的,所以我們剛才的schedule
是不支持持久化的。(也可能是我沒研究到)
那jenkins
支持嗎?他是支持的,你想,你建立一個項目,里面有一些job
的配置,什么時候執(zhí)行,執(zhí)行了干嘛,最后保存。
上述就是一個持久化的過程。
你保存了數(shù)據(jù)以后,下次能夠獲取到這個項目的任務信息,也就是說你哪怕重啟了jenkins
,任務依然存在。
說明任務本身作為了一條數(shù)據(jù),持久地保存了起來。
2.2.1 ApScheduler
"APScheduler
是一個Python
庫,可讓您安排稍后要執(zhí)行的Python
代碼,只需一次或定期執(zhí)行。您可以根據(jù)您添加新的作業(yè)或刪除舊的舊作業(yè)。如果您在數(shù)據(jù)庫中存儲工作,他們還將存活調(diào)度程序重新啟動并保持狀態(tài)。重新啟動調(diào)度程序時,它將運行它在脫機1時應該運行的所有作業(yè)。"
這是摘自ApScheduler
官網(wǎng)的介紹,總體來說它支持對任務的增刪改查(持久化),也能很好地支撐定時任務的執(zhí)行。它相對來說比較輕量,不像celery
那么復雜,也不像schedule
那么簡陋。由于我們不打算引入jenkins
,所以總體來說,ApScheduler
算得上是咱們執(zhí)行定時任務的不二之選了。
到此這篇關(guān)于Python定時任務實現(xiàn)方案的文章就介紹到這了,更多相關(guān)Python定時任務內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python并發(fā)請求下限制QPS(每秒查詢率)的實現(xiàn)代碼
這篇文章主要介紹了Python并發(fā)請求下限制QPS(每秒查詢率)實現(xiàn)方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06python實現(xiàn)銀行實戰(zhàn)系統(tǒng)
這篇文章主要為大家詳細介紹了python實現(xiàn)銀行實戰(zhàn)系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-02-02tensorflow入門之訓練簡單的神經(jīng)網(wǎng)絡(luò)方法
本篇文章主要介紹了tensorflow入門之訓練簡單的神經(jīng)網(wǎng)絡(luò)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02Python實現(xiàn)讀取txt文件并畫三維圖簡單代碼示例
這篇文章主要介紹了Python實現(xiàn)讀取txt文件并畫三維圖簡單代碼示例,具有一定借鑒價值,需要的朋友可以參考下。2017-12-12Python+FuzzyWuzzy實現(xiàn)模糊匹配的示例詳解
在日常開發(fā)工作中,經(jīng)常會遇到這樣的一個問題:要對數(shù)據(jù)中的某個字段進行匹配,但這個字段有可能會有微小的差異。本文將分享一個簡單易用的模糊字符串匹配工具包:FuzzyWuzzy,讓你輕松解決煩惱的匹配問題2022-04-04