免费A级毛片无码专区网站-成人国产精品视频一区二区-啊 日出水了 用力乖乖在线-国产黑色丝袜在线观看下-天天操美女夜夜操美女-日韩网站在线观看中文字幕-AV高清hd片XXX国产-亚洲av中文字字幕乱码综合-搬开女人下面使劲插视频

自動化運維?看看Python怎樣完成自動任務(wù)調(diào)度?


自動化運維?看看Python怎樣完成自動任務(wù)調(diào)度?

文章插圖
作者:韓信子@ShowMeAI Python3?技能提升系列:https://www.showmeai.tech/tutorials/56 本文地址:https://www.showmeai.tech/article-detail/323 聲明:版權(quán)所有 , 轉(zhuǎn)載請聯(lián)系平臺與作者并注明出處 收藏ShowMeAI查看更多精彩內(nèi)容

自動化運維?看看Python怎樣完成自動任務(wù)調(diào)度?

文章插圖
計劃任務(wù)是幾乎每個開發(fā)人員都會用到的功能 , 在服務(wù)器上可以用 Cron 作業(yè)來進行任務(wù)調(diào)度 , 它也是一種穩(wěn)定的方式 。但我們也可以完全程序化 , 全部使用 Python 來完成調(diào)度程序 , 而且可以有更簡單的配置方式 。
基于 Python 的任務(wù)調(diào)度快速安裝與應(yīng)用Python工具包 schedule可以輕松地在 Python 中進行任務(wù)調(diào)度 , 我們可以通過 PyPI 快速安裝它 。
$ pip install schedule借助于 schedule , 我們幾乎可以像用自然語言說話一樣快速構(gòu)建任務(wù)計劃和時間表 。比如 , 你想每小時運行一次某個功能函數(shù)(比如功能是發(fā)郵件的函數(shù)send_email)  , 寫法是這樣的:
schedule.every().hour.do(send_email)整個過程非常程序化和自然 , 完整的一個『構(gòu)建任務(wù)+任務(wù)調(diào)度』程序如下(我們把每小時發(fā)送一次郵件調(diào)整為每天一次了) 。
import timeimport scheduledef send_email():# 發(fā)送郵件的操作可以加在這里print("Sending email...")schedule.every().day.at("14:45").do(send_email)while True:schedule.run_pending()time.sleep(1)上面的代碼將在每天下午14:45 調(diào)用send_email函數(shù) 。除書寫簡單易用之外 , schedule 工具庫還提供了一系列其他功能 。
使用裝飾器進行調(diào)度我們可以使用裝飾器讓代碼更加干凈和優(yōu)雅 。schedule 工具包支持開箱即用的裝飾器 。我們把上面發(fā)送電子郵件的示例改用裝飾器完成 , 代碼如下 。
import timefrom schedule import repeat, every, run_pending@repeat(every(10).seconds)@repeat(every(5).seconds)def send_email():# 發(fā)送郵件的操作可以加在這里print("Sending email...")while True:run_pending()time.sleep(1)上述代碼示例中 , 我們?yōu)橥粋€任務(wù)定制了兩個計劃 。第一個將每 10 秒調(diào)用一次功能函數(shù) , 第二個將每 5 秒調(diào)用一次 。
使用參數(shù)運行計劃任務(wù)我們有時候會希望任務(wù)的調(diào)用更靈活一些 , 比如如果可以通過傳遞參數(shù)來控制任務(wù)調(diào)度 , 那就免去了寫死各種細節(jié)的問題 。下面我們把發(fā)郵件的任務(wù)寫成可接受參數(shù)的形式:
@repeat(every(10).seconds)@repeat(every(5).seconds, email="showmeai@yeah.net")def send_email(email="default_email@yeah.net"):# 發(fā)送郵件的操作可以加在這里print(f"Sending email...: to {email}")經(jīng)過上面的簡單處理 , 我們可以把電子郵箱當(dāng)作參數(shù)傳遞給調(diào)度任務(wù) 。如果我們希望通過命令行參數(shù)給腳本傳參 , 一個示例的代碼如下:
import argparsedef send_email(email="default_email@yeah.net"):# 發(fā)送郵件的操作可以加在這里print(f"Sending email...: to {email}")if __name__ == "__main__":parser = argparse.ArgumentParser()parser.add_argument("-e", "--email", help="Email to send")args = parser.parse_args()if args.email:send_email(args.email)else:send_email()接下來我們就可以在終端中運行上述腳本 , 如下所示:
$ python send_mail.py -e showmeai@yeah.net# 我們也可以使用默認的郵箱參數(shù)$ python send_email.py總結(jié)按計劃運行任務(wù)是開發(fā)過程中的最常見需求之一 , 系統(tǒng)自帶的 Crontab 很好用 , 但大家也可以試試用 Python 的 schedule 庫 , 讓整個代碼流程從功能到自動化任務(wù)調(diào)度都渾然一體 。

經(jīng)驗總結(jié)擴展閱讀