?? 作者:韓信子@ShowMeAI
?? Python3?技能提升系列:https://www.showmeai.tech/tutorials/56
?? 本文地址:https://www.showmeai.tech/article-detail/323
?? 宣告:著作權所有,轉載請聯系平臺與作者并注明出處
?? 收藏ShowMeAI查看更多精彩內容
計劃任務是幾乎每個開發人員都會用到的功能,在服務器上可以用 Cron 作業來進行任務調度,它也是一種穩定的方式,但我們也可以完全程式化,全部使用 Python 來完成調度程式,而且可以有更簡單的配置方式,
?? 基于 Python 的任務調度
?? 快速安裝與應用
Python工具包 ??schedule可以輕松地在 Python 中進行任務調度,我們可以通過 PyPI 快速安裝它,
$ pip install schedule
借助于 schedule,我們幾乎可以像用自然語言說話一樣快速構建任務計劃和時間表,比如,你想每小時運行一次某個功能函式(比如功能是發郵件的函式send_email) ,寫法是這樣的:
schedule.every().hour.do(send_email)
整個程序非常程式化和自然,完整的一個『構建任務+任務調度』程式如下(我們把每小時發送一次郵件調整為每天一次了),
import time
import schedule
def send_email():
# 發送郵件的操作可以加在這里
print("Sending email...")
schedule.every().day.at("14:45").do(send_email)
while True:
schedule.run_pending()
time.sleep(1)
上面的代碼將在每天下午14:45 呼叫send_email函式,除書寫簡單易用之外,schedule 工具庫還提供了一系列其他功能,
?? 使用裝飾器進行調度
我們可以使用裝飾器讓代碼更加干凈和優雅,schedule 工具包支持開箱即用的裝飾器,我們把上面發送電子郵件的示例改用裝飾器完成,代碼如下,
import time
from schedule import repeat, every, run_pending
@repeat(every(10).seconds)
@repeat(every(5).seconds)
def send_email():
# 發送郵件的操作可以加在這里
print("Sending email...")
while True:
run_pending()
time.sleep(1)
上述代碼示例中,我們為同一個任務定制了兩個計劃,第一個將每 10 秒呼叫一次功能函式,第二個將每 5 秒呼叫一次,
?? 使用引數運行計劃任務
我們有時候會希望任務的呼叫更靈活一些,比如如果可以通過傳遞引數來控制任務調度,那就免去了寫死各種細節的問題,下面我們把發郵件的任務寫成可接受引數的形式:
@repeat(every(10).seconds)
@repeat(every(5).seconds, email="[email protected]")
def send_email(email="[email protected]"):
# 發送郵件的操作可以加在這里
print(f"Sending email...: to {email}")
經過上面的簡單處理,我們可以把電子郵箱當作引數傳遞給調度任務,如果我們希望通過命令列引數給腳本傳參,一個示例的代碼如下:
import argparse
def send_email(email="[email protected]"):
# 發送郵件的操作可以加在這里
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 [email protected]
# 我們也可以使用默認的郵箱引數
$ python send_email.py
?? 總結
按計劃運行任務是開發程序中的最常見需求之一,系統自帶的 Crontab 很好用,但大家也可以試試用 Python 的 schedule 庫,讓整個代碼流程從功能到自動化任務調度都渾然一體,
參考資料
- ?? schedule:https://schedule.readthedocs.io/en/stable/
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/529849.html
標籤:Python
下一篇:重溫Python基礎——操作串列
