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)
以上です。試してみてください
コメントを書く