關於我
編程界的一名小小程序猿,目前在一個創業團隊任team lead,技術棧涉及Android、Python、Java和Go,這個也是咱們團隊的主要技術棧。 聯繫:hylinux1024@gmail.compython
最近在作項目的時候常常會用到定時任務,因爲個人項目是使用Java
來開發,用的是SpringBoot
框架,所以要實現這個定時任務其實並不難。linux
後來我在想若是我要在Python
中實現,我要怎麼作呢? 一開始我首先想到的是Timer
編程
這個是一個擴展自threading
模塊來實現的定時任務。它實際上是一個線程。小程序
# 首先定義一個須要定時執行的方法
>>> def hello():
print("hello!")
# 導入threading,並建立Timer,設置1秒後執行hello方法
>>> import threading
>>> timer = threading.Timer(1,hello)
>>> timer.start()
# 1秒後打印
>>> hello!
複製代碼
這個內置的工具使用起來也簡單,對於熟悉Java
的同窗來講也是很是容易的。然而我一直可否有一個更加Pythonic
的工具或者類庫呢?框架
這時我看到一篇文章介紹Scheduler
類庫的使用,忽然以爲這就是我想要的工具
要使用這個庫先使用如下命令進行安裝學習
pip install schedule
複製代碼
schedule
模塊中的方法可讀性很是好,並且支持鏈式調用spa
import schedule
# 定義須要執行的方法
def job():
print("a simple scheduler in python.")
# 設置調度的參數,這裏是每2秒執行一次
schedule.every(2).seconds.do(job)
if __name__ == '__main__':
while True:
schedule.run_pending()
# 執行結果
a simple scheduler in python.
a simple scheduler in python.
a simple scheduler in python.
...
複製代碼
其它設置調度參數的方法線程
# 每小時執行
schedule.every().hour.do(job)
# 天天12:25執行
schedule.every().day.at("12:25").do(job)
# 每2到5分鐘時執行
schedule.every(5).to(10).minutes.do(job)
# 每星期4的19:15執行
schedule.every().thursday.at("19:15").do(job)
# 每第17分鐘時就執行
schedule.every().minute.at(":17").do(job)
複製代碼
若是要執行的方法須要參數呢?code
# 須要執行的方法須要傳參
def job(val):
print(f'hello {val}')
# schedule.every(2).seconds.do(job)
# 使用帶參數的do方法
schedule.every(2).seconds.do(job, "hylinux")
# 執行結果
hello hylinux
hello hylinux
hello hylinux
hello hylinux
hello hylinux
hello hylinux
...
複製代碼
是否是很簡單?