파이썬 Celery 튜토리얼

Celery는 파이썬 분산 작업 큐 시스템이며, 비동기 작업을 쉽게 처리할 수 있도록 도와주는 라이브러리입니다. 이 튜토리얼에서는 Celery의 기본 개념과 사용법에 대해 알아보겠습니다.

목차

Celery란?

Celery는 분산 작업 큐 시스템으로, 여러 작업을 비동기적으로 실행하고 관리할 수 있는 기능을 제공합니다. 대규모 시스템에서 발생하는 많은 양의 작업을 효율적으로 처리하기 위해 사용됩니다.

Celery는 메시지 브로커(Message Broker)와 작업 실행자(Worker)로 구성되어 있습니다. 메시지 브로커는 작업 큐를 관리하고 결과를 저장하는 역할을 하며, 작업 실행자는 메시지 브로커로부터 작업을 받아 실행합니다.

Celery 설치

Celery를 설치하기 위해서는 우선 파이썬 패키지 관리자인 pip를 사용해야 합니다. 다음 명령어를 실행하여 Celery를 설치할 수 있습니다.

pip install celery

Celery 기본 사용법

Celery를 사용하기 위해서는 먼저 Celery 객체를 생성해야 합니다. 이 객체를 통해 작업을 예약하고 실행할 수 있습니다. 아래는 Celery 객체를 생성하는 예제입니다.

from celery import Celery

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

위 예제에서는 myapp이라는 이름의 Celery 객체를 생성하고, broker 매개변수에는 메시지 브로커의 주소를 설정합니다. 이후에는 app 객체를 통해 작업을 예약하고 실행할 수 있습니다.

Celery 작업 예약하기

Celery를 사용해 작업을 예약하기 위해서는 작업을 정의해야 합니다. 작업은 파이썬 함수로 정의하며, @app.task 데코레이터를 사용해 작업으로 등록합니다. 아래는 작업을 예약하는 예제입니다.

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

result = add.delay(4, 6)
print(result.get())

위 예제에서는 add 함수를 @app.task 데코레이터를 사용해 작업으로 등록하고, delay 메서드를 통해 작업을 예약합니다. 예약된 작업의 결과는 get 메서드로 확인할 수 있습니다.

Celery 결과 확인하기

Celery 예약 작업의 결과를 확인하기 위해서는 AsyncResult 객체를 사용합니다. AsyncResult 객체는 예약된 작업의 상태와 결과를 확인하는 메서드를 제공합니다. 아래는 결과를 확인하는 예제입니다.

result = add.delay(4, 6)
print(result.state)  # 작업 상태
print(result.get())  # 작업 결과

위 예제에서는 state 속성을 통해 작업의 상태를 확인하고, get 메서드를 통해 작업의 결과를 반환합니다.

Celery 워커 실행하기

Celery 워커는 작업을 실제로 실행하는 역할을 합니다. Celery를 실행하기 위해서는 워커를 먼저 실행해야 합니다. 아래 명령어를 사용하여 Celery 워커를 실행할 수 있습니다.

celery -A myapp worker --loglevel=info

위 명령어에서 -A 옵션을 사용하여 Celery 객체를 지정하고, worker 명령어를 사용하여 워커를 실행합니다. --loglevel 옵션을 통해 로그 레벨을 설정할 수 있습니다.

Celery 환경 설정

Celery는 프로젝트의 환경 설정을 사용하여 메시지 브로커와 워커의 주소를 지정할 수 있습니다. 환경 설정 파일은 .env.celeryconfig와 같은 이름으로 저장합니다. 아래는 환경 설정 파일의 예제입니다.

CELERY_BROKER_URL='pyamqp://guest@localhost//'
CELERY_RESULT_BACKEND='db+sqlite:///results.sqlite3'

위 예제에서는 CELERY_BROKER_URL 변수에 메시지 브로커의 주소를 설정하고, CELERY_RESULT_BACKEND 변수에 결과를 저장할 데이터베이스의 주소를 설정합니다.

이제 Celery의 기본 개념과 사용법에 대해 알아보았습니다. Celery를 사용하여 비동기 작업을 효율적으로 처리해보세요!

#python #celery