【Django】定期実行する方法(APScheduler)
1時間に1回、データを取得しデータベースに保存したり、毎朝4時にデータベースの重複チェックを行いデータの整理をするなど、自動実行する方法です。
APSchedulerをインストール
APSchedulerをインストールします。
pip install apscheduler
実行したいコードを記述する
アプリフォルダの中「task」というフォルダを作成し「task.py」というファイルを作成します。
app
├ admin.py
├ models.py
├view.py
└tasks
└task.py
task.pyに下記の通り記述する
from datetime import datetime, date
from apscheduler.schedulers.background import BackgroundScheduler
def periodic_execution():# 任意の関数名
# ここに定期実行したい処理を記述する
print ("定期実行")
def start():
scheduler = BackgroundScheduler()
scheduler.add_job(periodic_execution, 'cron', hour=8, minute=30)# 毎日23時59分に実行
scheduler.start()
# 5分おきに実行
# scheduler.add_job(periodic_execution, 'interval', minutes=5)
# 1時間5秒おきに実行
# scheduler.add_job(periodic_execution, 'interval', hours=1, seconds=5)
# 1日おきに実行
# scheduler.add_job(periodic_execution, 'interval', days=1)
# 1週間おきに実行
# scheduler.add_job(periodic_execution, 'interval', weeks=1)
# 2022年4月1日19時〜20時の間、1分おきに実行
# scheduler.add_job(periodic_execution, 'interval', minutes=1,
# start_date="2022-04-01 19:00:00",
# end_date="2022-04-01 20:00:00")
# 毎時20分に実行
# scheduler.add_job(periodic_execution, 'cron', minute=20)
# 月曜から金曜の間、8時に実行
# scheduler.add_job(periodic_execution, 'cron', hour=8, day_of_week='mon-fri')
サーバー起動中に処理が定期実行されるようにする
アプリフォルダ内の「app.py」に下記コードを追記します。
from django.apps import AppConfig
class AppConfig(AppConfig):
name = 'アプリ名'
# ↓追加
def ready(self):
from .ap_scheduler import start
start()
これでサーバー起動中に定期実行されます。
〜was missed by・・が表示され実行失敗する
デフォルトでは予定された実行時間よりも 1 秒以上 scheduler の起動が遅れてしまった場合実行されない。
下記のように"misfire_grace_time"を追加する。
scheduler.add_job(periodic_execution, 'cron', hour=8, minute=30, misfire_grace_time=300)
ディスカッション
コメント一覧
まだ、コメントがありません