python中有一個輕量級的定時任務調度的庫:schedule。他可以完成每分鍾,每小時,每天,周幾,特定日期的定時任務。因此十分方便我們執行一些輕量級的定時任務。
1 安裝
1.1在cmd中輸入python --version,輸出結果:Python 3.7.1
1.2在cmd中輸入pip install schedule
2代碼如下:
import schedule
import time
def job():
print("I'm working...")
schedule.every(1).minutes.do(job)
schedule.every().hour.do(job)
schedule.every().day.at("10:30").do(job)
schedule.every(5).to(10).days.do(job)
schedule.every().monday.do(job)
schedule.every().wednesday.at("13:15").do(job)
while True:
schedule.run_pending()
time.sleep(1)
# 上面的意思就是:
# 每隔十分鍾執行一次任務
# 每隔一小時執行一次任務
# 每天的10: 30
# 執行一次任務
# 每隔5到10天執行一次任務
# 每周一的這個時候執行一次任務
# 每周三13: 15
# 執行一次任務
# run_pending:運行所有可以運行的任務
#
# 當然,如果函數中帶有參數怎么辦呢?
# 很簡單,如下所示:
def job(name):
print("I'm working...")
name = 'jack'
schedule.every(1).minutes.do(job, name)
schedule.every().hour.do(job, name)
schedule.every().day.at("10:30").do(job, name)
schedule.every(5).to(10).days.do(job, name)
schedule.every().monday.do(job, name)
schedule.every().wednesday.at("13:15").do(job, name)
while True:
schedule.run_pending()
time.sleep(1)
疑問解答:
#
# 最近有人問我while
# True之類的是什么意思,很簡單,如果你去掉while
# True這個死循環的話,schedule.run_pending()
# 是沒有辦法持續運行的,那么schedule.run_pending()
# 是個什么東西呢——
# schedule其實就只是個定時器。在while
# True死循環中,schedule.run_pending()
# 是保持schedule一直運行,去查詢上面那一堆的任務,在任務中,就可以設置不同的時間去運行。跟linux中設置crontab定時任務是類似的。
#
# 所以,schedule有一定的局限性,所以只能用來執行一些小型的定時任務,它的局限性在哪呢——
# 1.
# 需要定時運行的函數job不應當是死循環類型的,也就是說,這個線程應該有一個執行完畢的出口。一是因為線程萬一僵死,會是非常棘手的問題;二是下一次定時任務還會開啟一個新的線程,執行次數多了就會演變成災難。
#
# 2.
# 如果schedule的時間間隔設置得比job執行的時間短,一樣會線程堆積形成災難,也就是說,我job的執行時間是1個小時,但是我定時任務設置的是5分鍾一次,那就會一直堆積線程。
#轉自:https://blog.csdn.net/liao392781/article/details/80521194#comments