Skip to content

1. Introduction to Celery


1. What’s a Task Queue?

  • 태스크 큐는 스레드 또는 시스템 간 작업을 분산하는 메커니즘으로 사용된다.
  • 태스크 큐의 입력은 태스크라고 하는 작업 단위(Unit of Work)이다.
  • 워커 프로세스는 수행할 새 작업에 대해 태스크 큐를 지속적으로 모니터링한다.
  • Celery는 일반적으로 브로커를 사용하여 클라이언트와 워커 사이를 중재하는 메시지를 통해 통신한다.
  • 클라이언트가 큐에 메시지를 추가하는 태스크를 시작하기 위해 브로커는 해당 메시지를 워커에게 전달한다.
  • Celery 시스템은 여러 워커와 브로커로 구성될 수 있으므로 고가용성과 수평적 확장이 가능하다.
  • Celery는 Python으로 작성되었지만, 프로토콜은 모든 언어로 구현할 수 있다.


2. What do I need?

  • Celery는 메시지를 보내고 받으려면 메시지 전송이 필요하다.
  • 이때 일반적으로 RabbitMQ 및 Redis 브로커를 사용하여 메시지 전송을 수행한다.


3. Celery is

1) Simple

  • Celery는 사용 및 유지 관리가 쉽고 구성 파일이 필요하지 않다.
  • 다음의 코드는 간단한 애플리케이션을 생성하는 예시이다.


from celery import Celery

app = Celery("hello", broker="amqp://guest@localhost//")

@app.task
def hello():
    return "hello world"


2) Highly Available

  • 워커와 클라이언트는 연결이 끊어지거나 실패하는 경우 자동으로 재시도하며, 일부 브로커는 Primary/Primary 또는 Primary/Replica 복제 방식으로 HA를 지원한다.


3) Fast

  • RabbitMQ, librabbitmq 및 최적화된 설정을 사용하는 경우 단일 Celery 프로세스는 밀리초 미만의 왕복 대기 시간으로 분당 수백만 개의 태스크를 처리할 수 있다.


4) Flexible

  • Celery의 거의 모든 부분을 자체적으로 확장하거나 사용할 수 있으며, 사용자 정의 풀 구현, 직렬 변환기, 압축 체계, 로깅, 스케줄러, 소비자, 생산자, 브로커 전송 등을 사용할 수 있다.


4. It supports

1) Brokers

  • RabbitMQ
  • Redis
  • Amazon SQS 등


2) Concurrency

  • prefork(multiprocessing)
  • Eventlet
  • gevent
  • thread(multithreaded)
  • solo(single threaded)


3) Result Stores

  • AMQP
  • Redis
  • Memcached
  • SQLAlchemy
  • Django ORM
  • MongoDB
  • File System 등


4) Serialization

  • pickle
  • json
  • yaml
  • msgpack 등


5. Features

1) Monitoring

  • 모니터링 이벤트 스트림은 워커가 내보내고, 내장 및 외부 도구에서 사용하여 클러스터가 수행하는 작업을 실시간으로 알려준다.


2) Work-flows

  • 단순하고 복잡한 워크플로우는 그룹화, 연결, 청크 등을 포함하고, “캔버스”라고 하는 강력한 기본 요소 집합을 사용하여 구성할 수 있다.


3) Time & Rate Limits

  • 초/분/시간당 실행할 수 있는 태스크 수 또는 태스크를 실행할 수 있는 시간을 제어할 수 있으며, 특정 워커 또는 각 태스크 유형에 대해 개별적으로 기본값을 설정할 수 있다.


4) Scheduling

  • 태스크를 실행할 시간을 초 또는 날짜/시간으로 지정하거나 간단한 간격을 기반으로 반복되는 이벤트에 대한 주기적인 태스크를 사용할 수 있다.


5) Resource Leak Protection

  • --max-tasks-per-child 옵션은 제어할 수 없는 메모리 또는 파일 설명자와 같은 리소스를 누출하는 사용자 태스크에 사용된다.


6) User Components

  • 각 워커 구성 요소는 사용자 지정할 수 있으며, 또한 추가 구성 요소를 사용자가 정의할 수 있다.
  • 워커는 워커의 내부를 세밀하게 제어할 수 있는 종속성 그래프인 “bootsteps”를 사용하여 구축된다.


6. Installation

  • Python 패키지 인덱스(PyPI) 또는 소스에서 Celery를 설치할 수 있다.


pip install celery


7. Bundles

  • Celery 및 특정 기능에 대한 종속성을 설치하는 데 사용할 수 있는 번들 그룹을 정의한다.
  • 요구 사항(Requirements)이나 pip 명령에서 [](대괄호)를 사용하여 지정할 수 있다.
  • 여러 번들은 ,(콤마)로 구분하여 지정할 수 있다.


pip install "celery[librabbitmq]"

pip install "celery[librabbitmq,redis,auth,msgpack]"


  • 사용 가능한 번들은 다음과 같다.


1] Serializers

  • celery[auth]
  • celery[msgpack]
  • celery[yaml]

2] Concurrency

  • celery[eventlet]
  • celery[gevent]

3] Transports and Backends

  • celery[librabbitmq]
  • celery[redis]
  • celery[sqs]
  • celery[memcache]
  • celery[django]

References