1. scheduleライブラリの入門
このレクチャーでは、時計職人みたいにスケジュール通りにタスクを実行できる方法を学ぶよ。自分の好きなタイミングでコードが動くようにするよ。準備はいい? 時間を操る方法を見てみよう!
schedule
ライブラリは、指定したスケジュールで関数を実行するための軽量モジュールだよ。
例えば、コードが毎朝6時データを集めたり、毎日リマインダーを送信したりする必要がある場合、schedule
がすごく便利だよ。
例えばこんなメリットがあるよ:
- シンプルさ: 直感的で使いやすいインターフェース、標準の
cron
やthreading
より全然簡単。 - ミニマリズム: 必要な機能だけを提供してる。
- わかりやすさ: ほぼ自然言語のようにスケジュールを指定できる。
ライブラリのインストール
まずは、schedule
ライブラリをインストールしよう。普通のPythonライブラリみたいにpip
を使うよ:
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. 繰り返しタスクの設定
簡単なところから始めよう—毎時間実行される関数をスケジュールするよ。簡単な挨拶メッセージを出す関数を作って、それをスケジュールに登録する。
例: 毎時間挨拶
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分おきにタスク実行
import schedule
import time
def task():
print("このタスクは10分おきに実行されるよ。")
# 毎10分タスクをスケジュール
schedule.every(10).minutes.do(task)
while True:
schedule.run_pending() # 時間が来たタスク全部を実行
time.sleep(1)
例: 特定の曜日にタスクを実行
次は、特定の曜日(例えば月曜日と水曜日だけ)、しかも午前9時にだけ実行されるタスクを設定しよう。
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
で簡単に管理できるよ。たとえば、毎朝実行されるタスクと毎金曜日のタスクがある場合とかね。
例: 複数のタスクを1つのスクリプトに統合
import schedule
import time
def morning_task():
print("おはよう! 朝のタスクを実行する時間だよ。")
def friday_task():
print("やった、金曜日だ! 金曜日のタスクを実行する時間だよ。")
# 毎朝7:30に朝タスク
schedule.every().day.at("07:30").do(morning_task)
# 毎金曜日16:00に金曜日タスク
schedule.every().friday.at("16:00").do(friday_task)
while True:
schedule.run_pending()
time.sleep(1)
実践的なアドバイスとよくある間違い
schedule
を使ってタスクを自動化するときに注意しておくべきポイントがいくつかあるよ。
まず、schedule
はメインスレッドでタスクを実行するよ。もしタスクが長時間かかるものだったり、他のタスクをブロックする可能性がある場合は、マルチスレッドや非同期呼び出しを使ったほうがいいかも。
次に、タスクを正確な時間に実行する必要があるなら、スクリプトが動作中であることや、デバイスがオンになっていることを確認してね。schedule
はデバイスやスクリプトが停止しているときには動作しないよ。
最後に、よくある誤解だけど、schedule
が一度スケジュールを逃したタスクを後から実行してくれると期待しないでね。スクリプトが停止していた間のタスクは、schedule
では実行されないよ。
GO TO FULL VERSION