[Django] - Celery beat

오동훈·2023년 1월 5일
0

Django

목록 보기
17/23
post-custom-banner

1. Celery beat

Celery Beat는 스케줄러입니다. celery의 task들 중 주기적으로 처리해야 될 작업들이 있다면 Celery Beat에게 설정만 해주고 맡기면 됩니다.

2. 사용법

1. 설치

아래의 명령어를 이용해 celery-beat를 설치해줍니다.

pip install django-celery-beat

2. settings 설정

시간을 기반으로 작업을 처리하는 것인 만큼 시간에 대한 정의를 먼저 하고 넘어가야 합니다.

INSTALLED_APPS = (
    ...,
    'django_celery_beat',
)

.
.
.

CELERY_TIMEZONE = 'Asia/Seoul'
CELERY_ENABLE_UTC=False

3. 스케줄 추가 - crontab 이용

crontab은 배치 작업을 위해 특정 시간 뿐만 아니라 특정 요일과 같은 다양한 단위시간 설정을 지원합니다. celery에는 이를 사용할 수 있는 모듈을 포함하구 있고, 사용법은 아래와 같습니다.

그리고 예를 들어, 여기서 1분마다 설정을 해두었다면 현재 시간 기준으로 1분 간격이 아니라 01분 00초, 02분 00초, ..., 15분 00초 이렇게 시스템 상 00초 기준으로 작동이 되는 원리입니다~!!

from celery.schedules import crontab

app.conf.beat_schedule = {
    'task_send_email': {
        'task': 'qna.tasks.task_send_email',
        'schedule': crontab(minute=0, hour=6) # 매일 6시간마다
    }
}
예시의미
crontab()매분 실행합니다.
crontab(minute=0, hour=0)매일 자정에 실행합니다.
crontab(minute=0, hour='*/3')매분 실행합니다.
crontab()3시간마다 실행: 자정, 오전 3시, 오전 6시, 오전 9시, 정오, 오후 3시, 오후 6시, 오후 9시.
crontab(minute=0,hour='0,3,6,9,12,15,18,21')이전과 동일합니다.
crontab(minute='*/15')15분마다 실행합니다.
crontab(day_of_week='sunday')일요일에 매분(!) 실행합니다.
crontab(0, 0, day_of_month='2')매월 2일에 실행합니다.
crontab(minute='*/10',hour='3,17,22', day_of_week='thu,fri')10분마다 실행하되 목요일 또는 금요일 오전 3-4시, 오후 5-6시, 오후 10-11시 사이에만 실행합니다.

더 자세한 설명은 Celery beat 공식 홈페이지를 참고하면 좋을 거 같습니다.

5. 실행

위와 같이 설정만 해주면 Celery beat는 간단하게 작업이 끝났습니다. beat를 구동시키기 전에 Celery를 우선적으로 작동시킨 후에 beat를 실행해주어야 합니다.

celery -A 프로젝트이름 beat 

하지만 우리는 귀찮으니 한 번에 쓰는 방법 또한 있습니다!

celery -A config worker --beat -l info

참고자료 📩

Celery beat 공식 홈페이지

profile
삽질의 기록들🐥
post-custom-banner

0개의 댓글