[블로그 따라하기] Celery + Redis 튜토리얼
들어가기 전
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/
Author And Source
이 문제에 관하여([블로그 따라하기] Celery + Redis 튜토리얼), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@c3epmos/블로그-따라하기-Celery-Redis-튜토리얼저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)