[파이썬] Flask-Celery 확장

Flask-Celery은 Flask와 Celery를 함께 사용할 때 편리한 인터페이스를 제공하는 확장입니다. Flask는 Python 웹 프레임워크로서, Celery는 비동기 작업을 처리하는 분산 태스크 큐입니다. Flask-Celery는 이 두 가지 기술을 결합하여 웹 애플리케이션에서 백그라운드 작업을 처리하는 데 도움이 됩니다.

설치하기

먼저 Flask-Celery 확장을 설치해야 합니다. 이를 위해 pip를 사용할 수 있습니다. 다음 명령을 실행하여 확장을 설치합니다:

pip install Flask-Celery

Flask-Celery 설정하기

Flask-Celery를 사용하기 위해 Flask 애플리케이션에 확장을 등록해야 합니다. Flask 애플리케이션 객체를 가져온 다음, 아래와 같이 확장을 초기화합니다:

from flask import Flask
from flask_celery import Celery

app = Flask(__name__)
app.config['CELERY_BROKER_URL'] = 'amqp://guest@localhost//'
app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost/'

celery = Celery(app)

위 코드에서 CELERY_BROKER_URL은 Celery 태스크 큐의 broker URL을 설정하고, CELERY_RESULT_BACKEND은 Celery 결과 백엔드를 설정합니다. 여기서는 RabbitMQ를 사용하고 있는데, broker URL을 해당 환경에 맞게 설정하시기 바랍니다.

백그라운드 태스크 정의하기

Flask-Celery를 사용하여 백그라운드에서 실행되는 태스크를 정의할 수 있습니다. 예를 들어, 아래와 같은 간단한 Hello World 태스크를 정의해보겠습니다:

@celery.task
def hello_world():
    return 'Hello, World!'

위 코드에서 @celery.task 장식자를 사용하여 hello_world 함수를 Celery 태스크로 등록합니다.

태스크 실행하기

hello_world 태스크를 실행하려면, 아래와 같이 delay 메소드를 호출하면 됩니다:

result = hello_world.delay()

위 코드에서 result는 비동기 작업의 결과입니다. 결과를 가져오려면 result.get()을 사용할 수 있습니다:

result = hello_world.delay()
result.get()  # 'Hello, World!'

Flask 애플리케이션에서 태스크 실행하기

Flask 애플리케이션에서 백그라운드 태스크를 실행하려면, 아래와 같이 queue 메소드를 사용합니다:

@celery.task
def send_email(to, subject, body):
    # Send email code here

@app.route('/send-email')
def send_email_route():
    send_email.queue('example@example.com', 'Hello', 'Hello, World!')
    return 'Email sent!'

위 코드에서 /send-email 경로로 요청이 오면 send_email 태스크가 큐에 추가되고, 백그라운드에서 실행됩니다.

결론

Flask-Celery 확장을 사용하면 Flask 애플리케이션에서 Celery를 통해 백그라운드 작업을 처리하는 것이 간단해집니다. Flask와 Celery를 결합하여 웹 애플리케이션의 성능과 확장성을 향상시킬 수 있습니다. Flask-Celery 확장의 강력한 기능과 편리한 API를 통해 더 효율적인 개발을 할 수 있습니다.