[pjt 422] 개발 일지 - 쓰레기통 사용량에 대한 통계 데이터 만들기 - 2

Expert Inpyo·2022년 8월 25일
0

PJT 422

목록 보기
6/6

Apscheduler를 사용해 자동화 로직 만들기

개요

일전에 만든 pandas 로직을 날마다 날마다 생성되는 log 데이터에 일정 시간마다 적용하고 싶었다.
이를 위해 django-apscheduler를 사용했다.

참고 문서 : django-apscheduler

pip

pip install apscheduler
pip install django-apscheduler

일반 apscheduler와 django-apscheduler를 설치한다.

settings.py

INSTALLED_APPS = [
    ...
    'django_apscheduler',
    ...
]

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

installed_apps에 'django_apscheduler'를 추가한다.
그 후, DatetimeFormat을 설정해준다. (위의 값은 default)

operator.py

해당 로직을 실행하고 싶은 app 안에 operator.py를 만들어준다(파일 이름은 마음대로)

from .models import *
from .serializers.date import * 

import pandas as pd
from datetime import date, timedelta
from apscheduler.schedulers.background import BackgroundScheduler
# apscheduler를 사용하기 위해 import 해오기

import logging


ytd = date.today() - timedelta(days=1)
dates = ytd.strftime('%Y%m%d')
logger = logging.getLogger('trash_event')

def start():
    scheduler = BackgroundScheduler()
    # scheduler.add_job(daily_data, 'interval', seconds=5)
    scheduler.add_job(daily_data, 'cron', hour=1)
    scheduler.start()

def daily_data()
	...

start 메서드를 정의한다
scheduler 변수를 BackgroundScheduler를 사용해 선언하고,
add_job 메서드를 추가한다.

add_job을 통해 스케쥴 시간을 관리할 수 있다.

(ex)
매 5초 마다 실행
scheduler.add_job(daily_data, 'interval', seconds=5)

매일 오전 1시 마다 실행
scheduler.add_job(daily_data, 'cron', hour=1)

apps.py

해당 로직을 실행하고 싶은 app의 apps.py를 수정한다

from django.apps import AppConfig
from django.conf import settings

class StatsConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'stats'

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

settings를 import한다.
이 후, ready 메서드를 오버라이드 해준다.

이렇게 스케쥴러를 작성 후
매일 오전 1시에 하루 전날(ytd)의 로그 파일을 불러와 pandas 로직을 적용해 쓰레기통 사용량을 데이터베이스에 추가하는 작업이 실행됨을 확인하였다.

profile
도전! 데이터 엔지니어

0개의 댓글