[python] Flask에 Celery를 사용한 비동기 작업 처리하기

Flask는 Python으로 웹 애플리케이션을 개발할 수 있게 해주는 경량화된 웹 어플리케이션 프레임워크입니다. Celery는 분산 작업 대기열을 처리하기 위한 비동기 작업 큐 시스템으로, Flask와의 통합이 가능합니다.

이 블로그에서는 Python Flask 어플리케이션에서 Celery를 사용하여 비동기 작업을 처리하는 방법에 대해 알아보겠습니다.

목차

  1. Celery와 RabbitMQ 설치하기
  2. Flask 어플리케이션 설정
  3. Celery 작업 정의하기
  4. Flask에서 Celery 작업 실행하기

Celery와 RabbitMQ 설치하기

Celery를 사용하기 위해서는 먼저 Celery와 대기열을 처리하기 위한 RabbitMQ를 설치해야 합니다.

Celery와 RabbitMQ를 설치하는 방법은 다음과 같습니다:

$ pip install celery
$ docker run -d -p 5672:5672 rabbitmq

Flask 어플리케이션 설정

Flask 애플리케이션에서 Celery를 사용하려면 flask_celery를 설치해야 합니다.

Flask 어플리케이션 설정은 다음과 같습니다:

from flask import Flask
from celery import Celery

app = Flask(__name__)
app.config['CELERY_BROKER_URL'] = 'pyamqp://guest@localhost//'
celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL'])
celery.conf.update(app.config)

@app.route('/')
def index():
    task = celery.send_task('tasks.add', args=[2, 2])
    return f'Task {task.id} submitted.'

if __name__ == '__main__':
    app.run()

Celery 작업 정의하기

Celery 작업은 task.py 파일에 정의해야 합니다. 이 예시에서는 두 숫자를 더하는 작업을 정의하겠습니다.

from celery import Celery

app = Celery('tasks', broker='pyamqp://guest@localhost//')

@app.task
def add(x, y):
    return x + y

Flask에서 Celery 작업 실행하기

Flask 애플리케이션에서 Celery 작업을 실행하는 예제 코드는 다음과 같습니다.

@app.route('/')
def index():
    task = celery.send_task('tasks.add', args=[2, 2])
    return f'Task {task.id} submitted.'

이제 Flask 애플리케이션을 실행하고 브라우저에서 해당 URL을 요청하면 Celery 작업이 실행됩니다.

이렇게 Python Flask와 Celery를 결합하여 비동기 작업을 처리할 수 있습니다. 이를 통해 웹 애플리케이션의 성능과 응답 시간을 향상시킬 수 있습니다.

참고 문헌