【Python】Apschedulerで定期処理を行いたい
はじめに
Pythonw使ったバックエンド開発を最近始めましたが、裏側で定期的にタスクを実行したいケースが出てきました。そこで、今回はAPScheduler (Advanced Python Scheduler) を使い、定期処理を行う方法について解説します。
前提
python:3.12.4
APScheduler:3.10.4
APSchedulerのインストール
まず、APSchedulerをインストールします。以下のコマンドを使用してインストールできます:
pip install apscheduler
基本的な使用方法
APSchedulerを使用するためには、スケジューラを作成し、ジョブを追加します。以下は、毎秒ごとにジョブを実行する簡単な例です:
from apscheduler.schedulers.background import BackgroundScheduler
import datetime
def my_job():
print(f"Job executed at {datetime.datetime.now()}")
if __name__ == "__main__":
scheduler = BackgroundScheduler()
scheduler.add_job(my_job, 'interval', seconds=1)
scheduler.start()
スケジューラの設定
スケジューラにはいくつかの種類があります。代表的なものは以下の通りです:
BlockingScheduler: このスケジューラは、ジョブの実行中にメインスレッドをブロックします。これは、スケジューラがメインプログラムとして動作し、他のコードの実行を許可しない場合に便利です。
BackgroundScheduler: このスケジューラは、バックグラウンドスレッドで動作し、メインスレッドをブロックしません。これにより、スケジューラはバックグラウンドでジョブを実行しながら、メインプログラムは他の作業を継続することができます。
AsyncIOScheduler: asyncioのイベントループで動作します。
次に、BackgroundSchedulerを例にスケジューラの設定を行います:
from apscheduler.schedulers.blocking import BackgroundScheduler
scheduler = BackgroundScheduler()
ジョブの追加
ジョブを追加するには、add_jobメソッドを使用します。以下は、いくつかの異なるスケジュール方法の例です:
固定間隔での実行
scheduler.add_job(my_job, 'interval', seconds=5)
毎日特定の時間に実行
scheduler.add_job(my_job, 'cron', hour=14, minute=30)
特定の日時に一度だけ実行
run_date = datetime.datetime(2024, 7, 4, 12, 0, 0)
scheduler.add_job(my_job, 'date', run_date=run_date)
ジョブの管理
APSchedulerは、ジョブの管理を簡単に行うことができます。ジョブIDを指定してジョブを追加し、後でそのジョブを参照できます。
ジョブの追加と削除
job = scheduler.add_job(my_job, 'interval', seconds=10, id='my_job_id')
ジョブの削除
scheduler.remove_job('my_job_id')
ジョブの一覧表示
jobs = scheduler.get_jobs()
for job in jobs:
print(f"Job ID: {job.id}, Next Run Time: {job.next_run_time}")
まとめ
APSchedulerを使用することで、Pythonアプリケーションで簡単にスケジュールされたジョブを管理できます。この記事では、基本的な使い方からジョブの管理方法までを紹介しました。これを参考に、様々な定期処理を効率的に実行できるようになると思います!
Discussion