CodeGym /課程 /Python SELF TW /使用 schedule 函式庫來排程啟動任務

使用 schedule 函式庫來排程啟動任務

Python SELF TW
等級 39 , 課堂 4
開放

1. 簡介 schedule 函式庫

在這堂課,我們會像鐘錶機械一樣學習如何根據排程啟動任務,讓我們的程式碼在我們想要的時候運行。準備好了嗎?今天我們要駕馭時間!

函式庫 schedule 是一個輕量模組,用來按照設定的時間表執行函式。如果你的程式必須根據排程執行,例如每天早上 6 點收集數據或發送每日提醒,那麼 schedule 就是你需要的工具。

schedule 的主要優點包括:

  • 簡易性: 直觀的介面,比透過 cronthreading 的標準解決方案簡單得多。
  • 極簡: 沒有多餘的功能——只有必要的功能。
  • 清晰: 使用幾乎像自然語言的方式來設定時間表。

安裝函式庫

首先需要安裝 schedule 函式庫。像大多數 Python 函式庫一樣,我們使用 pip

Bash
pip install schedule

現在,一切準備就緒,讓我們進入自動化的世界,看看 schedule 如何改變你的日常工作。

schedule 函式庫的基本方法

schedule 提供了一些方法,用於設定不同時間和頻率的任務:

  • every().day.at("HH:MM") — 每天在指定時間執行任務。
  • every().hour — 每小時執行任務。
  • every().minute — 每分鐘執行任務。
  • every().week.at("HH:MM") — 每周在指定時間執行任務。
  • every().monday.at("HH:MM") — 每週一在指定時間執行任務。
  • every(10).seconds — 每 10 秒(或任意其他時間)執行任務。

2. 設定重複任務

讓我們從簡單的例子開始——排程一個函式,每小時執行一次。我們將建立一個簡單的函式,輸出一條歡迎訊息,並根據排程啟動它。

範例:每小時歡迎提醒

Python

import schedule
import time

def say_hello():
    print("你好!我們正在進行時間自動化的工作。")

# 每小時執行一次 say_hello 函式
schedule.every().hour.do(say_hello)

while True:
    # 執行所有到時間的任務
    schedule.run_pending()
    time.sleep(1)

就這樣——你的第一個 schedule 腳本完成了!在這個例子中,我們使用方法 every().hour.do(say_hello),每小時說一次「你好!」是不是很有趣?

指令 schedule.every().hour.do(say_hello) 並不會直接執行函式 say_hello,而是將其加入時間表。當時間到了,它會透過代碼 schedule.run_pending() 呼叫這個函式。

3. 設定更複雜的時間間隔

如果我們希望不僅每小時執行任務,還想要每 10 分鐘執行一次,或者在特定的星期幾執行,該怎麼辦?schedule 支援大部分常見的時間表表達式,你可以輕鬆地使用它們。

範例:每 10 分鐘執行一次任務

Python

import schedule
import time

def task():
    print("這個任務每 10 分鐘執行一次。")

# 排程每 10 分鐘執行一次任務
schedule.every(10).minutes.do(task)

while True:
    schedule.run_pending() # 執行所有到時間的任務
    time.sleep(1)

範例:特定星期執行的任務

現在我們來試試排程一個任務,每週一和週三早上 9 點執行。

Python

import schedule
import time

def monday_wednesday_task():
    print("這個任務在每週一和週三上午 9 點執行。")

# 排程每週一和週三早上 9 點執行任務
schedule.every().monday.at("09:00").do(monday_wednesday_task)
schedule.every().wednesday.at("09:00").do(monday_wednesday_task)

while True:
    schedule.run_pending()
    time.sleep(1)

可以看到,schedule 處理各種時間表表達式,包括星期幾和精確的執行時間。這對於與工作或計劃事件同步的任務排程非常方便。

4. 處理有多種條件的任務

如果你的腳本需要執行多個任務,且每個任務都有自己的時間表,schedule 也可以輕鬆處理。例如,一個任務每天早上執行,另一個任務在每週五執行。

範例:將不同的任務結合在一個腳本中

Python

import schedule
import time

def morning_task():
    print("早安!該執行早晨的任務了。")

def friday_task():
    print("耶,星期五!該執行星期五的任務了。")

# 每天早上 7:30 的任務
schedule.every().day.at("07:30").do(morning_task)

# 每週五下午 4:00 的任務
schedule.every().friday.at("16:00").do(friday_task)

while True:
    schedule.run_pending()
    time.sleep(1)

實用建議與常見錯誤

當使用 schedule 進行任務自動化時,有幾點值得注意。

首先,請記住 schedule 在主線程中運行任務。這意味著,如果你的任務執行時間過長或可能會阻塞其他任務,應該考慮使用多線程或非同步呼叫來處理任務。

其次,如果你的任務需要在特定時間準確執行,請確保你的設備處於開啟狀態且腳本正在運行。如果腳本停止或設備關機,schedule 不會執行任務

最後,一個常見的誤解是認為 schedule 會補償錯過的任務。遺憾的是,如果腳本在某個任務應該執行時未運行,schedule 不會追溯執行該任務。

1
問卷/小測驗
日期和時間的操作,等級 39,課堂 4
未開放
日期和時間的操作
日期和時間的操作
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION