中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python定時任務的實現方法是什么

發布時間:2021-11-05 17:52:35 來源:億速云 閱讀:148 作者:柒染 欄目:開發技術

今天就跟大家聊聊有關Python定時任務的實現方法是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

1、定時任務

定時任務,顧名思義: 定時執行的任務,可以是一段bash命令,也可以是一個腳本文件。通常用于我們需要在特定時刻做事情。

舉個例子: 每晚8點執行全業務場景接口自動化回歸測試,又或者每隔20分鐘去你家QQ農場偷菜!

2、Python的定時任務

如果是大中型公司,一定有對應的平臺讓大家接入。一般這樣的平臺的名字或者描述都是: 分布式任務調度平臺這樣的。再不濟還有jenkins滿足我們的需求~

想起博主以前"小時候"(剛工作的時候),公司既沒有用jenkins,也沒有這樣的大平臺可以接入。我是怎么做定時任務的呢?

來看一段代碼:

import time
from datetime import datetime

def func():
    # 這個是定時任務要執行的ui/接口自動化方法
    pass

def main():
    while True:
      # 獲取當前時間
      now = datetime.now()
      if now.hour == 20 and now.minute == 0:
          # 當時間到達晚上8點0分,我們就開始跑自動化任務啦
          print("任務開始執行")
          func()
      time.sleep(60)
      
      
if __name__ == "__main__":
    main()

不知道現在是否還有人依然用著這樣的方式定時執行自動化測試,既然都2021年了,那咱們還是先進點吧。那么定時任務在Python中要怎么做呢?接著看。

2.1 幾種常見的方案

2.1.1 schedule

如果你只是上面提到的簡單訴求,那我建議直接使用schedule庫。這個庫我個人感覺是小學生版本的升級版,對于我那種局限的sleep任務做了一些擴展:

  • 支持了按周期執行任務

  • 執行時間閱讀起來更人性化

  • 還支持星期X執行

安裝scheduler

pip install schedule

官網給出的例子

import schedule
import time

# 定義一個執行方法
def job():
    print("I'm working...")

# 每10分鐘執行一次job
schedule.every(10).minutes.do(job)
# 每小時執行一次job
schedule.every().hour.do(job)
# 每天10:30執行job
schedule.every().day.at("10:30").do(job)
# 每個星期一執行一次
schedule.every().monday.do(job)
# 每個星期三的13:15執行一次
schedule.every().wednesday.at("13:15").do(job)
# 在每分鐘的17秒執行一次
schedule.every().minute.at(":17").do(job)


while True:
    # 進入schedule循環
    schedule.run_pending()
    time.sleep(1)

可以看出,api十分簡單,語義也很清晰。基本可以滿足我們的需求了~如果我們只是要定時去做某些事情的話,我想這個庫非常human

2.1.2 Jenkins

這個工具相比大家都有所了解吧~jenkins是一個比較強大的軟件了,它可以打通git/svn,也支持定時任務等。有著豐富的插件,比如郵件,是一套完整的CI/CD解決方案。對于任務的執行結果的記錄,也是可追溯的。估計唯一的缺點就是,引入了額外的系統。可能本身我只是一個自動化測試框架,現在卻要搭建一套jenkins

如果大家有代碼改動->執行定時任務類似的需求,又需要完善的權限控制系統的話,那jenkins會是你的不二選擇。

2.1.3 Celery

Python定時任務的實現方法是什么

我對這家伙了解的不太多,但python+celery仿佛成了一個固定搭配。不知道我理解的對不對:

celery是一個任務隊列,你可以制定好任務執行的規則,放入隊列中,會有專門的消費端來幫你執行這些任務。

說到這里就不得不提到持久化了~

2.2 題外話之持久化

什么是持久化呢?通俗的講,就是瞬時數據(比如內存中的數據,是不能永久保存的)持久化為持久數據(比如持久化至數據庫中,能夠長久保存)

我們可以把數據放到文件里,也可以放到數據庫(實際上也是磁盤里)進行持久性保存。

這樣做的目的: 數據可以存儲,下次也還能拿到這些數據。這里面的內容太多了,打算后面再開一節來講。

我們在Python里面的變量啊,這些數據都是存放在內存當中的,所以我們剛才的schedule是不支持持久化的。(也可能是我沒研究到)

jenkins支持嗎?他是支持的,你想,你建立一個項目,里面有一些job的配置,什么時候執行,執行了干嘛,最后保存。

上述就是一個持久化的過程。

你保存了數據以后,下次能夠獲取到這個項目的任務信息,也就是說你哪怕重啟了jenkins,任務依然存在。

說明任務本身作為了一條數據,持久地保存了起來。

2.2.1 ApScheduler

"APScheduler是一個Python庫,可讓您安排稍后要執行的Python代碼,只需一次或定期執行。您可以根據您添加新的作業或刪除舊的舊作業。如果您在數據庫中存儲工作,他們還將存活調度程序重新啟動并保持狀態。重新啟動調度程序時,它將運行它在脫機1時應該運行的所有作業。"

這是摘自ApScheduler官網的介紹,總體來說它支持對任務的增刪改查(持久化),也能很好地支撐定時任務的執行。它相對來說比較輕量,不像celery那么復雜,也不像schedule那么簡陋。由于我們不打算引入jenkins,所以總體來說,ApScheduler算得上是咱們執行定時任務的不二之選了。

看完上述內容,你們對Python定時任務的實現方法是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

荥经县| 高密市| 休宁县| 皋兰县| 澄江县| 宜昌市| 苗栗市| 天峨县| 富蕴县| 阳信县| 曲松县| 古交市| 固始县| 马龙县| 佛坪县| 拜城县| 平泉县| 汶上县| 资溪县| 淮滨县| 弋阳县| 郸城县| 绥中县| 保德县| 旬邑县| 开阳县| 栾川县| 富裕县| 囊谦县| 渝中区| 岳阳市| 丹阳市| 芷江| 崇阳县| 浦东新区| 乐都县| 德格县| 基隆市| 万山特区| 海城市| 会昌县|