11. scheduler.py

scheduler.pyは、django-apschedulerを使用することを前提としています。「毎月1日に支払の請求を実行」や「5分ごとにファイルの更新があるか確認する」といった定期的な処理をしたい場合は、 schedulerを定義します。

schedulerには、apschedulerを使って、どのようなタイミングで処理を実行するかを定義します。しかし、どのような処理を行うかについては、serviceクラスに記述してください。 例えば、以下は毎日1日に支払いの請求を実行する場合のサンプルコードです。

import logging

from apscheduler.schedulers.background import BackgroundScheduler
from django_apscheduler.jobstores import DjangoJobStore
from apscheduler.triggers.cron import CronTrigger
from django_apscheduler.jobstores import register_events
from django.conf import settings

from invoices import services

# Create scheduler to run in a thread inside the application process
scheduler = BackgroundScheduler(timezone=settings.TIME_ZONE)
scheduler.add_jobstore(DjangoJobStore(), "default")

def start():
    if settings.DEBUG:
        # Hook into the apscheduler logger
        logging.basicConfig()
        logging.getLogger('apscheduler').setLevel(logging.DEBUG)

    billing_service = services.BillingService()

    scheduler.add_job(
        billing_service.request_payment,
        trigger=CronTrigger(day=1),  # 毎月1日に実行
        id="request_payment",
        max_instances=1,
        replace_existing=True,
    )
    # Add the scheduled jobs to the Django admin interface
    register_events(scheduler)

    scheduler.start()