Schedule Python Function.
Pythonで特定の時間にタスクを実行するには、スケジューリングライブラリがいくつかありますが、その中でも「schedule」というライブラリが簡単で便利です。
まずは、Pythonのschedule
ライブラリをインストールします。
bashpip install schedule
次に、Pythonのスクリプトでschedule
を用いて毎時0分0秒に特定の関数を実行する方法を見てみましょう。
pythonimport schedule
import time
def job():
print("I'm working...")
# 0分にjob関数を実行するスケジュールを設定
schedule.every().hour.at(":00").do(job)
while True:
# 現在のスケジュールを実行
schedule.run_pending()
time.sleep(1)
上記のコードでは、毎時0分に関数job
が実行されます。
なお、この方法は1分単位の精度しか提供していないため、秒単位で正確なスケジューリングを行うには他の手段(例えばUnixのcronや、より詳細なスケジューリング機能を提供するライブラリ)が必要となります。
なお、Pythonを実行する環境が起動していないとこのスクリプトも動作しないので、24時間365日動作させるためには、スクリプトが実行される環境が常に稼働している必要があります。
Python の schedule
ライブラリでは、秒単位のスケジューリングができないため、この要求を満たすには別の手段を考える必要があります。標準の threading
ライブラリを使用して、毎分0秒と30秒に関数を実行する例を以下に示します。
pythonimport time
import threading
def job():
print("I'm working...")
def schedule_job():
current_time = time.time()
fraction, whole = math.modf(current_time)
next_minute = math.ceil(whole / 60) * 60
if fraction >= 0.5:
# もし現在が30秒を過ぎている場合、次の分に移る
next_minute += 60
for target in [next_minute, next_minute + 30]:
delay = target - time.time()
threading.Timer(delay, job).start()
# 次のスケジュールを設定
threading.Timer(60, schedule_job).start()
# 最初のスケジュールを設定
schedule_job()
# スクリプトが終了しないようにする
while True:
time.sleep(1)
上記のスクリプトでは、まず次の全分(:00)または半分(:30)までの遅延時間を計算し、その遅延の後に指定された関数を実行するタイマーを設定します。そして、毎分 schedule_job
自体を再スケジュールします。
注意すべきは、このスクリプトは非常に単純化されており、ネットワーク遅延やコンピュータのロードにより秒単位のタスクが少し遅れる可能性があることです。このような厳密なスケジューリング要件がある場合、より高度なスケジューリングライブラリや、リアルタイムオペレーティングシステムを使用することを検討する必要があります。
Pythonで現在時刻を表示するには、datetime
モジュールのdatetime.now()
関数を使います。以下にそのコードを示します:
pythonfrom datetime import datetime
# 現在の日時を取得
now = datetime.now()
print(now)
このコードは現在の日付と時間を表示します。しかし、特定の形式で時間を表示したい場合、strftime
メソッドを使うと便利です。以下はその一例です:
pythonfrom datetime import datetime
# 現在の日時を取得
now = datetime.now()
# 日時を文字列に変換(例:2023-07-26 15:20:01)
time_str = now.strftime("%Y-%m-%d %H:%M:%S")
print(time_str)
strftime
メソッドでは、時間の形式を指定するための特別な書式指定文字列を使います。上記の例では、"%Y-%m-%d %H:%M:%S"という書式指定文字列を使っています。これはそれぞれ年-月-日 時:分:秒を表しています。
私の知識は2021年9月までの情報に基づいていますが、その時点での最新の schedule
ライブラリのバージョンは 0.6.0 です。ライブラリの特定のバージョンについて質問がある場合、或いはライブラリのアップデートによる新機能や変更について質問がある場合は、公式のドキュメンテーションやリリースノートをご確認ください。