CodeGym /Javaコース /Python SELF JA /scheduleライブラリを使ってタスクをスケジュールで実行する方法

scheduleライブラリを使ってタスクをスケジュールで実行する方法

Python SELF JA
レベル 39 , レッスン 4
使用可能

1. scheduleライブラリの入門

このレクチャーでは、時計職人みたいにスケジュール通りにタスクを実行できる方法を学ぶよ。自分の好きなタイミングでコードが動くようにするよ。準備はいい? 時間を操る方法を見てみよう!

scheduleライブラリは、指定したスケジュールで関数を実行するための軽量モジュールだよ。 例えば、コードが毎朝6時データを集めたり、毎日リマインダーを送信したりする必要がある場合、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で簡単に管理できるよ。たとえば、毎朝実行されるタスクと毎金曜日のタスクがある場合とかね。

例: 複数のタスクを1つのスクリプトに統合

Python

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では実行されないよ。

1
Опрос
日付と時間の操作,  39 уровень,  4 лекция
недоступен
日付と時間の操作
日付と時間の操作
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION