상황: 웹 애플리케이션에서 시간이 오래 걸리는 작업을 처리하려고 합니다. 이러한 작업은 사용자가 요청을 보낸 후 즉시 결과를 반환받을 수 없으며, 서버에서 백그라운드로 처리해야 하는 작업입니다. 이를 위해 비동기 작업 처리 방법이 필요합니다.
해결방안: Celery와 Redis를 사용하여 웹 애플리케이션에서 비동기 작업을 처리하는 방법을 구현합니다.
1.
필요한 라이브러리 설치
Python 환경에서 Celery와 Redis 라이브러리를 사용하여 비동기 작업 처리를 구현합니다. 먼저 필요한 라이브러리를 설치합니다.
bashCopy code
pip install celery[redis] redis
Plain Text
복사
2.
Celery 설정 및 작업 정의
웹 애플리케이션에서 사용할 Celery 인스턴스를 설정하고, 시간이 오래 걸리는 작업을 정의합니다.
pythonCopy code
# tasks.py
from celery import Celery
app = Celery('tasks', broker='redis://localhost:6379/0')
@app.task
def long_running_task(x, y):
# 시간이 오래 걸리는 작업 구현
import time
time.sleep(10)
return x + y
Python
복사
3.
웹 애플리케이션에서 비동기 작업 실행
웹 애플리케이션에서 사용자가 시간이 오래 걸리는 작업을 요청할 때, 비동기로 해당 작업을 실행하고 결과를 반환합니다.
pythonCopy code
# app.py
from flask import Flask, jsonify
from tasks import long_running_task
app = Flask(__name__)
@app.route('/long_task')
def long_task():
task = long_running_task.delay(1, 2)
return jsonify({'task_id': task.id})
@app.route('/result/<task_id>')
def get_result(task_id):
task = long_running_task.AsyncResult(task_id)
if task.ready():
return jsonify({'result': task.result})
else:
return jsonify({'status': 'processing'})
if __name__ == '__main__':
app.run()
Python
복사
4.
웹 애플리케이션 실행 및 비동기 작업 테스트
웹 애플리케이션을 실행하고, 사용자가 시간이 오래 걸리는 작업을 요청하면, 서버에서 비동기로 해당 작업을 처리하고 결과를 반환합니다.
이러한 방법으로 웹 애플리케이션에서 비동기 작업을 처리할 수 있습니다. 이를 통해 사용자에게 더 나은 사용자 경험을 제공할 수 있습니다.