Celery는 분산 작업 큐 시스템으로, 파이썬으로 작성된 대표적인 비동기 작업 처리 라이브러리입니다. Celery를 사용하면 애플리케이션에서 시간이 걸리는 작업을 비동기적으로 처리할 수 있으며, 작업을 백그라운드에서 실행하여 애플리케이션의 성능을 향상시킬 수 있습니다.
Celery의 주요 구성 요소
Celery는 크게 세 가지 주요 구성 요소로 구성되어 있습니다:
-
큐(Broker): Celery 작업을 수신하고 관리하는 메시지 브로커입니다. 일반적으로 RabbitMQ, Redis, Amazon SQS 등과 같은 메시지 브로커를 사용할 수 있습니다.
-
작업자(Worker): 작업을 수행하는 Celery의 실제 실행자입니다. 애플리케이션에서 비동기 작업을 처리하는 역할을 합니다.
-
결과 저장소(Result Backend): 작업의 결과를 저장하는 저장소입니다. 작업의 결과를 쉽게 추적하고 확인할 수 있도록 합니다. Redis, RabbitMQ, SQLAlchemy 등과 같은 저장소를 사용할 수 있습니다.
Celery의 동작 원리
-
Celery 작업을 수행하고자 하는 코드를 작성합니다. 이 코드는
@task
데코레이터를 이용하여 Celery Task로 등록됩니다. -
작업을 호출하면, Celery는 해당 작업을 메시지 브로커로 전송합니다.
-
메시지 브로커는 작업을 큐에 등록합니다.
-
작업자(Worker)가 큐에서 작업을 가져와 실행합니다.
-
작업이 성공적으로 완료되면 결과를 결과 저장소에 저장합니다.
Celery 사용 예시
다음은 Celery를 사용하여 비동기 작업을 처리하는 예시 코드입니다:
# celery.py 파일
from celery import Celery
app = Celery('myapp', broker='amqp://guest@localhost//', backend='redis://localhost')
@app.task
def add(x, y):
return x + y
위 코드는 add
라는 Celery 작업을 정의한 예시입니다. 이 작업은 주어진 두 수를 더한 결과를 반환합니다.
이렇게 작성된 코드를 실행하기 위해서는 Celery 실행자를 실행해야 합니다. 아래 명령어를 사용하여 실행할 수 있습니다:
$ celery -A celery worker --loglevel=info
이렇게 Celery를 실행하고 나면, Celery 작업을 호출하여 비동기적으로 실행할 수 있습니다:
# main.py 파일
from celery import current_app
from celery.result import AsyncResult
# 작업 실행
result = current_app.send_task('add', args=[4, 6])
# 작업 결과 확인
result.get()
위 코드에서 send_task
함수는 add
작업을 실행하고, get
메서드는 작업 결과를 동기적으로 가져오는 역할을 합니다.
마치며
Celery는 파이썬에서 비동기 작업을 처리할 때 꼭 필요한 라이브러리입니다. 이번 포스트에서는 Celery의 기초에 대해 알아보았는데, 더 자세한 내용은 Celery 공식 문서를 참고해보시기 바랍니다.
#TechBlog #Celery