note title

Celery의 Broker, Redis

CeleryBroker 없이 실행되지 않는다.
Celery는 작업을 바로 실행하지 않고 큐에 넣어두는 구조를 보이기 때문이다.

따라서 반드시 이 작업을 임시로 저장해줄 중간 큐, 브로커가 필요하다.

왜 Redis

Celery에서 Redis를 사용하는 이유가 무엇일까? 그 이유는, Redis가 빠르고 가벼우며 공식적으로 지원하는게 가장 큰 특징으로 볼 수 있을 것이다.

  1. 빠르고 가볍다

    • Redis의 특징으로 인메모리 기반, 싱글 스레드 처리, 설정이 쉽다
    • 개발/테스트 환경에서 사용하기 가장 쉽다
  2. Celery가 공식적으로 Redis를 지원한다.

CELERY_BROKER_URL = "redis://~"
CELERY_RESULT_BACKEND = "redis://~"
  1. 실무에서도 많이 사용한다
    • 개발용
    • 소규모 서비스
    • 실시간 처리

코드 예제

Celery를 Broker Redis를 사용한다면 다음과 같다.

from celery import Celery
 
app = Celery(
	"task",
	broker="redis://~",
	backend="redis://~",
)
@app.task
def add(x,y):
	return x+y
  • 작업 실행
add.delay(3, 5) #작업 요청
  • 워커 실행
celery -A tasks worker --loglevel=info
  • 결과 확인
result  = add.delay(4, 6)
result.ready() # 작업 완료 여부 (T/F)
result.get() # 결과




참고자료