Django에서 apscheduler 사용하기

이상해씨·2023년 8월 22일
0

장고 (Django)

목록 보기
15/38
post-custom-banner

apscheduler

  • 특정시간 마다 배치를 실행하는 기능
  • schedule보다 더 많은 기능을 제공하는 라이브러리. 복잡한 작업, schedule보다 고급 기능이 필요한 경우 사용.
  • apscheduler 참고

사용법

1) apscheduler 설치

  • terminal에 아래 명령어 실행
pip install apscheduler

2) setting.py에 백엔드 설정

# settings.py

INSTALLED_APP = [
	...
    'django_apscheduler',
    'MyAppConfig',
    ...
]

# default
APSCHEDULER_DATETIME_FORMAT = "N j, Y, f:s a" 

# 자동으로 스케쥴러 실행
SCHEDULER_DEFAULT = True

3) 작업함수 생성

# <APP이름>/tasks.py

from apscheduler.schedulers.background import BackgroundScheduler

scheduler = BackgroundScheduler()

def my_scheduled_task():
    # 여기에 작업 내용을 작성합니다.
    print("Scheduled task executed!")

# 작업을 스케줄러에 추가
scheduler.add_job(my_scheduled_task, 'interval', minutes=30)

4) app 등록

myapp/apps.py

from django.apps import AppConfig
from .tasks import scheduler

class MyAppConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'myapp'

    def ready(self):
        scheduler.start()

5) 앱 실행

python manage.py runserver
  • 서버가 실행되는 동안, 자동적으로 코드가 실행됨
  • celery와 연동하여 비동기작업, 분산 작업 스케쥴링 (선택)

스케쥴러 함수만 분리하여 사용하고 싶다면? 🤔

참고 - https://ediblepotato.tistory.com/3
(스케쥴러 실행 함수를 분리하여 코드하는 법에 대해 잘 설명 되어 있음👍)

1) apscheduler 설치

pip install apscheduler

2) setting.py에 백엔드 설정

# settings.py

INSTALLED_APP = [
	...
    'django_apscheduler',
    'MyAppConfig',
    ...
]

# default
APSCHEDULER_DATETIME_FORMAT = "N j, Y, f:s a" 

# 자동으로 스케쥴러 실행
SCHEDULER_DEFAULT = True

3) ⭐작업함수 및 py파일 생성

  • operator.py에 스케쥴러 파일을 따로 관리 및 실행
# <APP이름>/tasks.py

from apscheduler.schedulers.background import BackgroundScheduler

scheduler = BackgroundScheduler()

def my_scheduled_task():
    # 여기에 작업 내용을 작성합니다.
    print("Scheduled task executed!")

# 작업을 스케줄러에 추가
scheduler.add_job(my_scheduled_task, 'interval', minutes=30)
# <APP이름>/operator.py

import time
from apscheduler.schedulers.background import BackgroundScheduler

def schedule_process():
    scheduler = BackgroundScheduler()
    scheduler.add_job(tasks, 'cron', hour=12,  minute=00)
    scheduler.start()

4) ⭐ app 등록

myapp/apps.py

from django.apps import AppConfig
from .tasks import scheduler

class MyAppConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'myapp'

    def ready(self):
                if settings.SCHEDULER_DEFAULT:
            from . import operator
            operator.schedule_process()

5) 앱 실행

python manage.py runserver
  • 서버가 실행되는 동안, 자동적으로 코드가 실행됨
  • celery와 연동하여 비동기작업, 분산 작업 스케쥴링 (선택)

참고

profile
공부에는 끝이 없다
post-custom-banner

0개의 댓글