Celery를 활용한 비동기 스케줄링 처리

비동기 작업은 웹 애플리케이션에서 중요한 부분입니다. 사용자의 요청에 대한 빠른 응답을 제공하면서, 시간이 오래 걸리는 작업을 뒷단에서 비동기적으로 처리할 수 있습니다. 이러한 작업을 가능하게 하는 도구 중 하나가 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 #비동기