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