Celery를 활용한 비동기 이벤트 처리

비동기 이벤트 처리는 웹 애플리케이션에서 매우 중요한 부분입니다. 사용자 요청에 대한 처리 시간을 줄이고, 대기 시간을 최소화하기 위해 비동기 방식을 사용합니다. 이를 위해 Celery라는 Python 라이브러리를 통해 비동기 작업을 처리할 수 있습니다.

Celery란?

Celery는 분산 작업 큐 시스템으로, 이미 구성된 작업들을 비동기적으로 처리하는 역할을 합니다. 대기열(queue)에 작업을 보내고, Celery 워커(worker)가 이 작업들을 처리합니다. Celery는 별도의 워커 프로세스를 실행하여 작업을 처리하므로, 웹 애플리케이션은 빠르게 응답할 수 있습니다.

Celery 사용하기

설치

Celery를 사용하기 위해 먼저 설치해야 합니다. 다음과 같이 pip를 통해 Celery를 설치할 수 있습니다.

pip install celery

Celery 워커 실행

Celery 작업을 처리하기 위해 워커 프로세스를 실행해야 합니다. 다음과 같이 명령어를 입력하여 Celery 워커를 실행할 수 있습니다.

celery -A myapp worker --loglevel=info

위 명령어에서 myapp은 Celery 어플리케이션의 이름입니다. 이 이름은 myapp.py 파일에 정의된 Celery 객체의 app 속성에서 사용되는 값입니다.

비동기 작업 정의

Celery를 사용하여 비동기 작업을 정의할 수 있습니다. 다음은 예시입니다.

from celery import Celery

# Celery 어플리케이션 생성
app = Celery('myapp', broker='pyamqp://guest@localhost//')

# 비동기 작업 정의
@app.task
def my_task(param):
    # 작업 수행
    return result

위 코드에서 my_task는 비동기로 실행될 작업을 정의한 함수입니다. 이 함수를 @app.task 데코레이터로 데코레이트하여 Celery 작업으로 등록합니다.

작업 보내기

비동기 작업을 보내기 위해서는 다음과 같이 apply_async 또는 delay 메서드를 사용합니다.

result = my_task.apply_async(args=(param,))

위 코드에서 args는 작업 함수에 전달할 인자를 나타내며, 작업을 보낼 때 함께 전달됩니다.

작업 결과 얻기

비동기 작업이 완료된 후 그 결과를 얻기 위해서는 get 메서드를 사용합니다.

result = result.get()

위 코드에서 result는 비동기 작업의 결과를 담고 있는 객체입니다. get 메서드를 사용하여 실제 결과를 얻을 수 있습니다.

마무리

Celery를 활용하여 비동기 이벤트를 처리하는 방법을 알아보았습니다. Celery를 사용하면 웹 애플리케이션의 성능을 향상시키고, 사용자 경험을 개선할 수 있습니다. 비동기 작업을 처리해야 하는 경우, Celery를 고려해 보세요.

#Celery #비동기 #Python