비동기 작업은 웹 애플리케이션에서 중요한 부분입니다. 사용자의 요청에 대한 빠른 응답을 제공하면서, 시간이 오래 걸리는 작업을 뒷단에서 비동기적으로 처리할 수 있습니다. 이러한 작업을 가능하게 하는 도구 중 하나가 Celery입니다.
Celery는 Python 기반의 분산 작업 큐 시스템으로, 비동기 작업을 처리하기 위한 강력한 도구입니다. Celery는 작업을 생성하고 큐에 추가한 뒤, 작업자(worker)를 통해 작업을 실행하고 결과를 반환합니다. 이를 통해 웹 애플리케이션에서 별도의 프로세스로 작업을 처리할 수 있으며, 주요 요청에 빠르게 응답할 수 있습니다.
Celery 설치하기
Celery를 사용하기 위해서는 먼저 Celery를 설치해야 합니다. 다음 명령을 통해 Celery를 설치할 수 있습니다.
pip install celery
Celery 작업 정의하기
Celery를 사용하여 비동기 작업을 처리하려면 먼저 작업을 정의해야 합니다. 작업은 함수로 정의되며, @task
데코레이터를 사용하여 Celery 작업으로 등록합니다. 작업은 결과를 반환하거나, 결과를 반환하지 않을 수 있습니다.
from celery import Celery
app = Celery('myapp', broker='redis://localhost:6379/0')
@app.task
def add(x, y):
return x + y
위의 예시에서는 add
함수를 Celery 작업으로 정의하였습니다. 이 작업은 두 개의 인자를 받아 합을 반환합니다.
Celery 작업 실행하기
Celery 작업을 실행하기 위해서는 작업자(worker)를 시작해야 합니다. 작업자는 큐에 추가된 작업을 가져와 처리합니다. 다음 명령을 통해 작업자를 시작할 수 있습니다.
celery -A myapp worker --loglevel=info
위의 명령에서 myapp
은 작업을 정의한 모듈의 이름을 의미합니다. 작업자는 작업을 실행하며, 결과를 반환합니다.
Celery 작업 예약하기
Celery는 작업을 예약하고 특정 시간에 작업을 실행할 수도 있습니다. 예약된 작업은 큐에 추가되어 해당 시간에 작업자에 의해 실행됩니다. 다음과 같이 예약된 작업을 정의할 수 있습니다.
from datetime import timedelta
from myapp import add
# 10초 후에 작업 실행
add.apply_async(args=[4, 5], countdown=10)
# 1분 후에 작업 실행
add.apply_async(args=[2, 3], eta=datetime.utcnow() + timedelta(minutes=1))
위의 예시에서는 apply_async
메서드를 사용하여 작업을 예약하였습니다. countdown
매개변수는 작업을 지정된 시간 후에 실행하도록 지정하며, eta
매개변수는 작업을 특정 시간에 실행하도록 지정합니다.
Celery를 사용하면 웹 애플리케이션에서 비동기 작업을 처리할 수 있습니다. Celery를 통해 큰 작업을 뒷단에서 비동기 처리하고, 사용자에게 빠른 응답을 제공할 수 있습니다.
References
#Celery #비동기