一個簡單的Python調度器Schedule

關於我
一個有思想的程序猿,終身學習實踐者,目前在一個創業團隊任team lead,技術棧涉及Android、Python、Java和Go,這個也是咱們團隊的主要技術棧。
Github:https://github.com/hylinux1024
微信公衆號:終身開發者(angrycode)python

最近在作項目的時候常常會用到定時任務,因爲個人項目是使用Java來開發,用的是SpringBoot框架,所以要實現這個定時任務其實並不難。linux

後來我在想若是我要在Python中實現,我要怎麼作呢?
一開始我首先想到的是Timergit

0x00 Timer

這個是一個擴展自threading模塊來實現的定時任務。它實際上是一個線程。github

# 首先定義一個須要定時執行的方法
>>> def hello():
    print("hello!")

# 導入threading,並建立Timer,設置1秒後執行hello方法
>>> import threading
>>> timer = threading.Timer(1,hello)
>>> timer.start()
# 1秒後打印
>>> hello!

這個內置的工具使用起來也簡單,對於熟悉Java的同窗來講也是很是容易的。然而我一直可否有一個更加Pythonic的工具或者類庫呢?微信

這時我看到一篇文章介紹Scheduler類庫的使用,忽然以爲這就是我想要的框架

0x01 Scheduler

要使用這個庫先使用如下命令進行安裝工具

pip install schedule

schedule模塊中的方法可讀性很是好,並且支持鏈式調用學習

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
...

是否是很簡單?

0x02 學習資料

  1. https://bhupeshv.me/A-Simple-Scheduler-in-Python/
相關文章
相關標籤/搜索