[python] Celery로 분산 태스크 큐를 구성하는 방법은 어떻게 되는가?

개요

분산 태스크 큐는 동시에 여러개의 태스크를 실행하고, 작업을 분산시켜 처리하는 시스템입니다. Celery는 Python으로 작성된 분산 태스크 큐 라이브러리로, 쉽게 태스크를 비동기적으로 실행하고 결과를 처리할 수 있습니다.

설치

Celery를 사용하기 위해서는 먼저 Celery를 설치해야 합니다. 아래 명령어를 실행하여 Celery를 설치합니다.

pip install celery

기본 설정

Celery를 사용하기 위해서는 큐, 워커(worker), 브로커(Broker)를 설정해야 합니다. 큐는 태스크가 전달되는 장소이고, 워커는 태스크를 실행하는 프로세스입니다. 브로커는 큐와 워커 사이의 중개 역할을 합니다.

Celery 설정은 보통 celery.py라는 파일에 작성하며, 이 파일에서 필요한 설정을 정의합니다.

아래는 Celery 설정의 예시입니다.

from celery import Celery

# App 객체 생성
app = Celery('myapp', broker='pyamqp://guest@localhost//')

# 태스크 정의
@app.task
def add(x, y):
    return x + y

위의 예시에서 myapp은 Celery 앱 이름입니다. broker는 브로커의 주소를 설정하는 부분인데, 여기서는 간단하게 pyamqp://guest@localhost//로 설정하였습니다.

이제 Celery 앱을 생성하고, 태스크를 정의할 수 있습니다.

태스크 실행

태스크는 apply_async() 메소드를 사용하여 실행할 수 있습니다. 아래는 태스크를 비동기적으로 실행하는 예시입니다.

from celery import Celery
from tasks import add

# Celery 앱 생성
app = Celery('myapp', broker='pyamqp://guest@localhost//')

# 태스크 실행
result = add.apply_async((4, 6))

print(result.get())

위의 예시에서는 add() 태스크를 apply_async() 메소드로 실행하고, 결과를 result 변수에 저장합니다. 결과를 가져오기 위해 get() 메소드를 사용하여 결과를 출력합니다.

워커 실행

원하는 수량의 워커를 실행하려면 아래 명령어를 사용하면 됩니다.

celery -A myapp worker --loglevel=info

위의 명령어에서 -A 옵션은 Celery 앱 이름을 지정하는 부분입니다. --loglevel 옵션은 로그 레벨을 설정하는 부분인데, 필요에 따라 변경하실 수 있습니다.

마치며

이제 Celery를 사용하여 분산 태스크 큐를 구성하는 방법에 대해 알아보았습니다. Celery를 사용하면 Python으로 비동기적으로 태스크를 실행하고 결과를 처리할 수 있으며, 큰 규모의 작업을 효율적으로 처리할 수 있습니다.

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