(最終更新日:2023年7月)
✔このような方へ向けて書かれた記事となります
「Pythonで定期実行をどのように実現するのか知りたい」
「Pythonでタスクを定期的に実行する方法やスケジュール設定がわからない」
「Pythonの定期実行に関する実践的な例を見たい」
✔当記事を通じてお伝えすること
- Pythonでの定期実行の基本概念
- Pythonで定期実行を行う方法やスケジュール設定
- Pythonを用いた定期実行の具体的な実例
当記事では、Pythonでの定期実行の基本から、スケジュール設定や様々なタイミングでの実行方法まで、具体的な例を用いてわかりやすく説明しています。
ぜひ最後までお読みいただき、Pythonでの定期実行をマスターしましょう。
Python定期実行の基本概念
Pythonでの定期実行を理解するには、まずその基本的な概念を把握することが重要です。
基本を理解したうえで、詳しいコードなどを見ていきましょう。
- Pythonの定期実行とは?
- イベント処理とスケジューリング
- 定期実行する関数の準備
- スケジュール登録と条件設定
Pythonの定期実行とは?
Pythonでの定期実行とは、特定の関数やコードブロックを、自動で定期的に実行することを意味します。
例えば以下のような定期的なタスクがある場合に役立ちます。
- データベースのバックアップを取る
- 特定の時間にメールを送信する
- ウェブサイトの情報を定期的にスクレイピングする
当記事を最後までご覧いただければ、Python言語で定期実行を実装する方法が学べます。
イベント処理とスケジューリング
定期実行を実装するためには、「スケジューリング」が用いる必要があります。
スケジューリングとは、特定のタスクを計画的に実行するための手段。
コンピューターの世界では一般的に用いられる概念です。
スケジューリングにより、特定の「イベント」が発生したとき、または特定の時間が来たときに、指定したタスクを実行できるのです。
定期実行する関数の準備
Pythonでの定期実行をおこなうには、まず定期実行するための関数を準備してください。
この関数は、特定のタスクを実行するコードブロックを含み、スケジューリングによって定期的に呼び出されるものです。
関数は、単純な出力から複雑なデータ処理まで、実行したい任意のタスクを定義できます。
import time
# とてもシンプルな定期実行する関数
def task():
print("定期実行中...")
スケジュール登録と条件設定
関数を準備したら、次にその関数をスケジューリングする必要があります。
これは、関数を「登録」し、それがいつ実行されるべきかを定義するプロセスです。
条件は「毎日午前8時」、「毎週月曜日」、「5分ごと」など、要件によって異なります。
実践:Scheduleモジュールを使った定期実行
Pythonには、Scheduleモジュールを使い、定期実行をおこなえます。
さまざまな方法があるものの、まずはどんなものかを理解いただくため、このScheduleモジュールについて見ていきましょう。
- Scheduleモジュールとは
- インストール方法
- 初めての定期実行スクリプト
- 繰り返し間隔の設定
- スケジュール処理の定期実行
Scheduleモジュールとは
Schedule
は、Pythonの外部ライブラリで、定期的にタスクを実行するためのスケジューリングを提供するもの。
その使用方法は直感的であり、スケジュールの設定も柔軟におこなえます。
インストール方法
Pythonのパッケージマネージャーであるpipを使って、Scheduleを簡単にインストールできます。
以下のコマンドを実行してください。
pip install schedule
初めての定期実行スクリプト
では、実際にSchedule
を使って、定期実行を行うスクリプトを作成してみましょう。
以下のコードは、毎分”Hello, World!”を表示するスクリプトです。
import schedule
import time
def job():
print("Hello, World!")
schedule.every(1).minutes.do(job)
while True:
schedule.run_pending()
time.sleep(1)
繰り返し間隔の設定
Schedule
は、繰り返し間隔の設定に関しても非常に柔軟です。
以下に、いくつかの設定例を示します。
import schedule
def job():
print("Job executed.")
# 毎分実行
schedule.every(1).minutes.do(job)
# 毎時間実行
schedule.every().hour.do(job)
# 毎日12:00に実行
schedule.every().day.at("12:00").do(job)
# 毎週月曜日実行
schedule.every().monday.do(job)
スケジュール処理の定期実行
実行する関数とそのスケジュールを登録したら、そのタスクを永続的に実行するためのループを作成します。
これは、以下のようにwhile
ループと共にschedule.run_pending()
メソッドを使用しておこないましょう。
import schedule
import time
def job():
print("Job executed.")
schedule.every(10).seconds.do(job)
while True:
schedule.run_pending()
time.sleep(1)
指定した間隔(ここでは10秒)で定期的にジョブ(関数)を実行します。
run_pending()
メソッドは、スケジュールされたすべてのジョブをチェックし、現在実行すべきものを実行する関数です。
time.sleep(1)
により、CPUを過度に使わないように1秒間スリープさせています。
豊富なスケジュール管理例
Scheduleモジュールは、多様なスケジューリングを可能にします。
- 特定の時間に実行
- 引数付き関数の定期実行
- 毎日一度の定期実行
- 指定時間までの繰り返し実行
特定の時間に実行
特定の時間(例:毎日13:15)にジョブを実行するためのスケジュール設定は以下のようになります。
import schedule
def job():
print("Job executed.")
schedule.every().day.at("13:15").do(job)
引数付き関数の定期実行
関数が引数を取る場合は、do()
メソッドに引数とともに関数を渡します。
以下は、毎分メッセージを表示するジョブを設定する例です。
import schedule
def job(message):
print(message)
schedule.every(1).minutes.do(job, message="Hello, World!")
毎日一度の定期実行
毎日同じ時間にジョブを実行するスケジュールは以下のように設定します。
import schedule
def job():
print("Job executed.")
schedule.every().day.at("10:30").do(job)
指定時間までの繰り返し実行
特定の時間までジョブを繰り返し実行する場合は、以下のようにスケジューリングをおこないます。
毎日8時から10時まで5分ごとにジョブを実行する例です。
import schedule
import datetime
def job():
print("Job executed.")
def stop_job():
return schedule.CancelJob
schedule.every(5).minutes.do(job).tag('daily_task')
schedule.every().day.at("10:00").do(stop_job).tag('daily_task')
スケジュールジョブにタグをつけて、10時になったらそのタグのジョブを全てキャンセルしています。
デコレータを用いたスケジューリング
こちらでは、デコレータの基本概念と、それをスケジュール管理に適用する方法を説明します。
スケジュール管理には、デコレータを使用することも可能です。
- デコレータの基本概念
- スケジュール管理にデコレータを適用
デコレータの基本概念
デコレータは、関数やクラスの振る舞いを変更するための特殊な種類の関数またはクラスです。
デコレータは、「@」記号と関数名を使って関数の定義の上部に配置します。
# デコレータ関数の定義
def my_decorator(func):
def wrapper():
print("デコレータ処理の前")
func()
print("デコレータ処理の後")
return wrapper
# デコレータを使って関数を修飾する
@my_decorator
def my_function():
print("元の関数の処理")
# デコレータが適用された関数の実行
my_function()
# 出力結果
# デコレータ処理の前
# 元の関数の処理
# デコレータ処理の後
スケジュール管理にデコレータを適用
以下に、スケジューリングにデコレータを適用した例を示します。
import schedule
import time
def periodic(interval, executor=schedule.every):
def scheduler(f):
executor(interval).seconds.do(f)
return f
return scheduler
@periodic(5)
def job():
print("Job executed.")
while True:
schedule.run_pending()
time.sleep(1)
periodic
デコレータを作成し、定期的に実行するジョブを定義します。
このデコレータは任意の間隔を受け取り、その間隔でジョブを実行するのです。
クラウドでPython定期実行
こちらでは、クラウド上でのスケジュール管理の利点と、その定期実行方法の概要をご紹介します。
クラウドを利用することで、Pythonのスケジューリングをより効率的に、より強力におこなえます。
- クラウド上でのスケジュール管理の利点
- 定期実行方法の概要
クラウド上でのスケジュール管理の利点
クラウド上でスケジューリングをおこなう主な利点は、以下のとおり。
- パワフルなリソースを利用できる
- 自身のマシンを24時間稼働させる必要がない
また、クラウドサービスでは、複数のスケジューリングジョブを管理し、監視する機能も提供されています。
定期実行方法の概要
クラウド上でPythonスクリプトを定期実行するには、まずクラウドサービスの選択が必要です。
- Amazon Web Services(AWS)
- Google Cloud Platform(GCP)
- Microsoft Azure
これらのサービスの中には、AWS LambdaやGoogle Cloud Functionsなど、サーバーレスコンピューティングサービスがあります。
これらを利用して、Pythonスクリプトをトリガーに基づいて実行したり、定期的に実行したりすることが可能です。
具体的な設定方法はクラウドサービスごとに異なりますが、基本的にはPythonスクリプトをクラウドサービスにアップロードし、そのスクリプトを実行するスケジュールを設定します。
また、スケジュールの設定には、クラウドサービスが提供する標準的なスケジューリング機能が利用可能です。
Pythonにおける定期実行の応用
Pythonの定期実行は多岐に渡る領域で活用可能です。
AI・機械学習のモデルの定期的な更新、投資自動化(仮想通貨)など、多様な応用例が存在します。
- AI・機械学習
- 投資自動化(仮想通貨)
AI・機械学習
AI・機械学習の分野では、モデルの学習・再学習や、データの収集・前処理など、定期的におこなうべきタスクが多々あります。
新たに収集したデータを使ってモデルを定期的に更新するため、または新たなデータに基づいて予測を生成するために、Pythonのスケジューリングが活用されます。
また、モデルのパフォーマンス監視や定期的なレポート作成にも利用できます。
import schedule
import time
def train_model():
# モデルの学習処理
print("モデルの学習を実行しました。")
def predict_data():
# データの予測処理
print("データの予測を実行しました。")
# 10秒ごとにモデルの学習を実行
schedule.every(10).seconds.do(train_model)
# 1分ごとにデータの予測を実行
schedule.every(1).minutes.do(predict_data)
while True:
# スケジュールされたタスクの実行
schedule.run_pending()
time.sleep(1)
投資自動化(仮想通貨)
投資自動化の一例として、仮想通貨の自動取引システムがあります。
定期的に市場の状況を確認し、設定した取引ルールに基づいて売買を行うためにPythonスクリプトが定期的に実行されるものです。
24時間365日市場の動きを逃さず、かつ手動での操作を必要とせずに取引が可能となります。
import schedule
import time
from binance.client import Client
# Binance APIの設定
API_KEY = 'your_api_key'
API_SECRET = 'your_api_secret'
client = Client(API_KEY, API_SECRET)
# 取引ルールとして、価格が一定の閾値を超えた場合に売買を実行するとします
THRESHOLD_PRICE = 50000
def check_market():
# 市場の状況を確認する処理
ticker = client.get_symbol_ticker(symbol='BTCUSDT')
current_price = float(ticker['price'])
print("現在の価格:", current_price)
if current_price > THRESHOLD_PRICE:
# 設定した閾値を超えた場合、売買を実行する処理をここに記述する
print("売買を実行しました。")
# 10秒ごとに市場の状況を確認する
schedule.every(10).seconds.do(check_market)
while True:
# スケジュールされたタスクの実行
schedule.run_pending()
time.sleep(1)
まとめ
定期実行の効果やPythonにおけるスケジュール管理の多様性、そして定期実行を活用して効率性を高める方法について学びました。
- 定期実行の大切さと効果
- Pythonスケジュール管理の多様性
- 効率性を高めるために定期実行を活用
Pythonの定期実行は、コードの効率性と効果性を高めるための重要な要素です。
コードの自動実行により、手動での実行を必要とせず、定期的かつ時間を選ばずにタスクを実行することが可能となります。
またPythonでスケジューリングをおこなう方法は、多岐に渡ります。
シンプルなスケジューリングから複雑なパターンまで、またローカル環境からクラウド環境まで、要件に応じて最適な手法を選ぶことが可能です。
Pythonの定期実行を活用することで、多くの領域で効率性を高められるでしょう。