Web
Django) Tasks Scheduler
서영환
2024. 9. 15. 15:50
Tasks Scheduler 란?
- Django 애플리케이션 내에서 비동기 작업을 관리할 수 있는 포괄적인 솔루션
- 작업을 스케줄링하고, 실행하며, 모니터링할 수 있는 기능을 제공
- Django의 데이터베이스 모델을 활용하여 작업을 정의하고 추적
- 단순히 지연된 작업이나 예약된 작업을 실행하는 것뿐만 아니라, 다양한 주기적 작업과 cron 표현식을 사용한 복잡한 타이밍 요구 사항도 지원
특징
- 데이터베이스 기반 스케줄링
- Django의 ORM을 사용하여 작업, 매개변수, 실행 시간 및 상태를 데이터베이스에 저장한다.
- 이를 통해 작업이 배포나 서버 재시작 시에도 손실되지 않도록 보장한다.
- Django Admin 통합
- Django의 관리자 인터페이스와 통합되어, 작업을 스케줄링하고 모니터링하며 관리할 수 있는 사용자 친화적인 방법을 제공한다.
- 새로운 작업 생성, 스케줄링된 작업 목록 보기, 작업 실행 결과 확인 등이 가능하다.
- 유연한 스케줄링 옵션
- 일회성 작업, 고정 간격으로 반복되는 작업, 복잡한 타이밍 요구 사항에 대한 cron 스타일 작업을 지원한다.
- 각 프로젝트의 특정 요구 사항에 맞게 작업 실행을 조정할 수 있다.
- 비동기 실행 및 작업 재시도 기능
- 작업을 비동기적으로 처리하여 메인 애플리케이션의 흐름이 작업 실행으로 인해 차단되거나 느려지지 않도록 보장하며, 실패한 작업을 자동으로 재시도할 수 있는 메커니즘을 제공한다.
사용 예시
1. 이메일 전송: Django 앱의 tasks.py 파일에 작업 함수를 작성
from django.core.mail import send_mail
def send_daily_email():
send_mail(
'Daily Report',
'Here is your daily report.',
'from@example.com',
['to@example.com'],
fail_silently=False,
)
2. 테이블 값 변경: 특정 시간에 데이터베이스 테이블의 값을 증가
from myapp.models import MyModel
def increment_table_value():
for obj in MyModel.objects.all():
obj.value += 1
obj.save()
3. 작업 스케줄링: Django Admin 인터페이스에서 작업을 스케줄링, Admin 사이트에서 Scheduled Tasks 섹션으로 이동해서 새 작업을 추가
작업 유형 선택: Scheduled Task, Repeatable Task, Cron Task 중 하나를 선택
Scheduled Task: 특정 시간에 한 번 실행
Repeatable Task: 일정 간격으로 반복 실행
Cron Task: cron 표현식을 사용해서 복잡한 스케줄링 설정
4. 작업 실행 : 작업이 스케줄링되면, Django Tasks Scheduler의 워커가 큐를 모니터링하고 작업을 실행
python manage.py runworker