[python] Flask-RESTful에서 비동기 작업 스케줄링 방법

Flask-RESTful은 Flask 프레임워크를 기반으로 한 RESTful API를 빠르고 쉽게 구축할 수 있도록 도와주는 도구입니다. 이 때, 비동기적으로 실행되는 작업을 스케줄링하기 위해서는 추가적인 라이브러리와 방법을 사용해야 합니다.

Celery 사용하기

Celery는 Python에서 비동기 작업 처리를 위한 라이브러리입니다. Flask-RESTful에서 Celery를 사용하여 비동기 작업 스케줄링을 구현하는 방법을 알아보겠습니다.

1. Celery 설치하기

먼저, Celery를 설치해야 합니다. 다음 명령을 실행하여 Celery를 설치합니다.

pip install celery

2. Flask-RESTful에 Celery 통합하기

Flask-RESTful에서 Celery를 사용하기 위해서는 Flask-CeleryExt라는 확장을 사용할 수 있습니다. 이 확장은 Flask와 Celery를 통합해주며, 간편한 설정 및 사용이 가능합니다. 다음과 같이 Flask-CeleryExt를 설치합니다.

pip install Flask-CeleryExt

3. Celery 설정하기

Celery를 사용하기 위해서는 Celery 인스턴스를 생성하고 설정해야 합니다. Flask-RESTful에서는 아래와 같이 Celery 인스턴스를 생성할 수 있습니다.

from flask import Flask
from celery import Celery

app = Flask(__name__)

app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379/0'
app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost:6379/0'

celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL'])
celery.conf.update(app.config)

위의 예제 코드에서는 Celery 인스턴스를 celery 변수에 할당하고, Flask 애플리케이션의 설정 정보를 Celery에 업데이트합니다.

4. 비동기 작업 정의하기

Celery를 사용하여 비동기 작업을 정의하는 방법은 다양합니다. 일반적으로 @celery.task 데코레이터를 사용하여 작업을 정의할 수 있습니다. 다음과 같이 작업을 정의해보겠습니다.

@celery.task
def add_numbers(x, y):
    return x + y

위의 예제에서는 add_numbers라는 비동기 작업을 정의합니다. 해당 작업은 두 개의 숫자를 더한 결과를 반환합니다.

5. 비동기 작업 실행하기

비동기 작업을 실행하기 위해서는 delay 메서드를 사용합니다. 다음과 같이 작업을 실행할 수 있습니다.

result = add_numbers.delay(5, 3)

위의 예제 코드에서는 add_numbers 작업을 실행하고, 작업의 결과를 result 변수에 할당합니다.

마치며

Flask-RESTful에서 비동기 작업 스케줄링을 위해 Celery를 사용하는 방법을 알아봤습니다. Celery를 사용하여 비동기 작업을 처리하면 응답 시간을 개선하고, 서버의 부담을 줄일 수 있습니다. 하지만 Celery를 사용할 때에는 세부적인 설정과 관리가 필요하기 때문에 신중하게 고려해야 합니다.

더 자세한 내용은 Celery 공식 문서를 참고하시기 바랍니다.