[블로그 따라하기] Celery + Redis 튜토리얼

4440 단어 djangodjango

들어가기 전

Celery

celery 는 시간이 오래걸리는 작업을 비동기 작업으로 빼는 역할을 한다.
Job(task) 들은 message broker(RebbitMQ, redis..) 에 잠시 대기하고,
실행이 가능한 Celery Worker 가 broker 로부터 Job(task) 를 받아와서 실행하는 구조이다.

Redis(REmote DIctionary Server)

redis 는 Remote 에 위치하고 In-Memory 에서 프로세스로 존재하는 저장소이다.
비관계형 key-value 형식 데이터를 관리하며 string, set, sorted set, hash, list 자료구조를 지원한다.

자세한 내용은 아래 블로그 참고
https://velog.io/@hyeondev/Redis-%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C

튜토리얼

1. message broker 설치 및 실행

해당 튜토리얼에서는 redis 를 설치 및 실행한다.

2. Celery 설치

pip install redis
pip install celery

3. tasks.py

celery 를 설치한 다음 가장 먼저 celery instance(app) 를 얻어야 합니다.
instance 가 task 를 만들거나 worker 를 관리하는 등 celery 를 사용하는 시작점으로 쓰이게 된다.

from celery import Celery

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

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

Celery 의 첫 번째 인자는 현재 모듈의 이름, 두 번째 인자는 broker 의 url 이다.

4. run celery

celery -A tasks worker --loglevel=info

실제 배포 환경에서는 supervisord 같은 플랫폼에서 제공하는 툴을 사용한다.

5. task 호출하기

task 를 호출하기 위해 delay() 메서드를 사용한다. 이 명령은 apply_async() 의 단축 버전이다.

from tasks import add
add.delay(1,4)

task 의 호출은 AsyncResult instance 를 리턴한다. 이 instance 를 통해 task 의 상태나 작업이 종료되기를 기다리거나 리턴해야 하는 어떤 결과 값이 있다면 그걸 받을 수도 있다.

6. 결과

task 의 결과값을 받아서 어떤 처리를 하려면 Celery 가 상태값을 어딘가에 저장하거나 보낼 수 있도록 해줘야 한다.(backend 를 지정) 동일하게 redis 를 사용한다.

from celery import Celery

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

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

https://velog.io/@hyeondev/Redis-%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C
https://whatisthenext.tistory.com/127
https://devlog.jwgo.kr/2019/07/02/using-celery-with-django-1/

좋은 웹페이지 즐겨찾기