Flask-RESTful은 파이썬으로 작성된 웹 애플리케이션을 개발하기 위한 프레임워크입니다. 스케줄링된 작업은 주기적으로 실행되어야 하므로, 이러한 작업을 다른 프로세스로 분리하는 것이 중요합니다. 이를 통해 Flask-RESTful 서버가 계속 응답 가능한 상태를 유지할 수 있습니다.
1. Celery를 사용한 작업 분리
Celery는 파이썬 기반의 분산 작업 큐 시스템으로, 비동기적으로 작업을 실행할 수 있도록 도와줍니다. Flask-RESTful 애플리케이션에서 Celery를 사용하여 스케줄링된 작업을 다른 프로세스로 분리하는 방법은 다음과 같습니다.
1.1 Celery 설치
Celery를 사용하기 위해 먼저 설치해야 합니다. 다음 명령을 사용하여 Celery를 설치합니다.
$ pip install celery
1.2 Celery 설정 파일 생성
Celery를 사용하기 위해선 설정 파일을 만들어야 합니다. 이 설정 파일은 Celery 작업자(worker)에 대한 설정 정보를 포함합니다. 예를 들면, Celery 작업자가 어떤 큐(queue)를 감시해야 하는지나 Redis나 RabbitMQ와 같은 메시지 브로커에 연결해야 하는지를 정의합니다.
# celeryconfig.py
broker_url = 'redis://localhost:6379/0' # Redis 메시지 브로커 주소
result_backend = 'redis://localhost:6379/0' # Celery 작업 결과를 저장할 Redis 주소
1.3 작업 정의
Flask-RESTful 애플리케이션에서 스케줄링된 작업을 분리하기 위해 작업 함수를 정의해야 합니다. 작업 함수는 Celery를 사용하여 실행될 비동기 작업입니다. 작업 함수는 @celery.task
데코레이터를 사용하여 정의합니다.
# app/tasks.py
from celery import Celery
celery = Celery('tasks', broker='redis://localhost:6379/0')
@celery.task
def schedule_task():
# 스케줄링된 작업의 코드를 작성합니다.
pass
1.4 작업 예약
스케줄링된 작업을 예약하기 위해 시간 기반의 작업 스케줄러를 사용할 수 있습니다. Celery에서는 beat_schedule
설정을 사용하여 작업 예약 정보를 정의할 수 있습니다.
# celeryconfig.py
from datetime import timedelta
beat_schedule = {
'schedule-task': {
'task': 'app.tasks.schedule_task',
'schedule': timedelta(minutes=5), # 작업 실행 주기
},
}
1.5 Celery 작업자 실행
Celery 작업자는 Celery 작업을 실행할 수 있는 프로세스입니다. Celery 작업자를 실행하기 위해 터미널에서 다음 명령을 실행합니다.
$ celery -A app.celery worker --loglevel=info
Celery 작업자는 설정 파일에 정의된 설정 정보를 기반으로 작업을 수행합니다.