【Django】スケジュール(定期)実行

【Django】スケジュール(定期)実行

Djangoで定期的に実行したり、スケジュールを設定して実行したりする場合の方法を説明します。

Step1 ライブラリをインストール

下記の二つをインストールします。

pip install apscheduler 
pip install django-apscheduler

Step2 INSTALLED_APPSにdjango-apschedulerを追加

settings.pyのINSTALLED_APPSに下記のように追加します。

INSTALLED_APPS = [
   ・・・・
    'django_apscheduler',
]

Step3 必要なテーブルを作成

以下のようにmanage.pyを使ってテーブルを作成します。

model.pyを修正した際にテーブルに反映する時と異なり、python manage.py makemigrationsは不要です。

python manage.py migrate

これにより、django_apscheduler_djangojob / django_apscheduler_djangojobexecutionの2つのテーブルが作成されます。このテーブルにより、定期実行されるタスクが管理されます。

Step4 プロジェクトフォルダのurl.pyを修正

最後にプロジェクトフォルダのurl.pyに修正を加えます。

from apscheduler.schedulers.background import BackgroundScheduler
from django_apscheduler.jobstores import DjangoJobStore,register_events,register_job
from customer.customerUpdate import testfunc

scheduler = BackgroundScheduler()
scheduler.add_jobstore(DjangoJobStore(), "default")

@register_job(scheduler, "interval", seconds = 3, id = 'test_job', replace_existing=True)
def test_job():
    print("test")

register_events(scheduler)
scheduler.start()

これにより、3秒毎にtest_jobが実行される、つまりtestという文字列がprintされます。

また、スケジュール実行にする場合は、cronのような形で指定することも可能です。その場合は上記の「@register_job(scheduler, “interval”, seconds = 3, id = ‘test_job’,」の部分を下記のように変更します。

#0時、6時、12時、18時に実行されるように設定
@register_job(scheduler, "cron", hour='0,6,12,18', replace_existing=True)

以上です。試してみてください

Djangoカテゴリの最新記事