Celery로 분산 처리하기

컴퓨터 시스템에서 많은 작업을 동시에 처리해야 할 때, 분산 처리는 매우 유용한 방법입니다. 하나의 서버에서 작업을 처리하는 것보다 여러 대의 서버에 작업을 분산시키는 것이 성능과 확장성을 향상시킬 수 있습니다.

이번 포스트에서는 분산 처리를 위해 Celery를 사용하는 방법에 대해 알아보겠습니다. Celery는 Python 기반의 분산 작업 큐이며, 간단하고 강력한 인터페이스를 제공합니다.

Celery 설치하기

먼저, Celery를 설치하기 위해 다음 명령을 실행해주세요:

pip install celery

Celery 설정하기

Celery를 사용하기 위해서는 설정 파일을 만들어야 합니다. 설정 파일은 Celery 작업자(worker)들에게 필요한 정보를 제공합니다. 일반적으로 celery.py 또는 celery_config.py와 같은 이름으로 설정 파일을 작성합니다.

# celery_config.py

from celery import Celery

app = Celery('myapp', broker='redis://localhost:6379/0')

app.config_from_object('myapp.celeryconfig')

위의 예시에서는 Redis를 Celery 브로커로 사용하고 있습니다. 필요한 경우 다른 브로커를 사용할 수도 있습니다.

작업 정의하기

Celery에서 작업을 정의하기 위해서는 @app.task 데코레이터를 사용합니다. 작업은 독립적으로 실행되어야 할 함수입니다.

# tasks.py

from celery import Celery

app = Celery('myapp', broker='redis://localhost:6379/0')

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

위의 예시에서 add 함수는 두 개의 인자를 받아서 더한 결과를 반환합니다. 이 함수는 분산 처리될 수 있도록 Celery 작업으로 선언되었습니다.

작업 실행하기

Celery 작업을 실행하기 위해서는 작업자(worker)를 시작해야 합니다. 다음 명령으로 작업자를 시작할 수 있습니다:

celery -A myapp worker --loglevel=info

위의 명령에서 -A 옵션은 Celery 설정 파일을 지정합니다. --loglevel 옵션은 로그 레벨을 설정합니다.

작업을 예약하려면 apply_async 메서드를 사용합니다:

from myapp.tasks import add

result = add.apply_async((4, 8))

위의 예시에서 add 작업에 인자로 (4, 8)을 전달하고, apply_async 메서드를 사용하여 비동기로 작업을 예약합니다.

이외에도 Celery는 큐, 태스크 상태 조회 등 다양한 기능을 제공합니다. 자세한 내용은 Celery 문서를 참고해주세요.

#celery #분산처리