Celery

GisangLee·2022년 6월 24일
0

django

목록 보기
12/35

Django의 비동기 처리 (feat. Celery + Redis)


1. 세팅

  • config/settings/celery_conf.py
import os, time
from celery import Celery
from django.conf import settings
 
# `celery` 프로그램을 작동시키기 위한 기본 장고 세팅 값을 정한다. 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.dev')
 
app = Celery('비동기 함수가 들어갈 모듈 이름.tasks', broker=settings.BROKER_URL)
# app = Celery('my_app.tasks', broker=settings.BROKER_URL)
# app = Celery('posts.tasks', broker=settings.BROKER_URL)

# namespace='CELERY'는 모든 셀러리 관련 구성 키를 의미한다. 반드시 CELERY라는 접두사로 시작해야 한다. 
app.config_from_object(settings, namespace='CELERY')
 
# 장고 app config에 등록된 모든 taks 모듈을 불러온다. 
app.autodiscover_tasks()

  • config/settings/init.py
from __future__ import absolute_import
# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celery_conf import app as celery_app
__all__ = ('celery_app',)

  • my_app/tasks.py ( ex. users.tasks )
from config.celery_conf import app
from celery import shared_task

@shared_task
def sum_numbers(x, y):
	return x + y

  • config/settings/dev.py
...
...
# BROKER_URL = 'redis://redis:6379/0'  For Docker
BROKER_URL = 'redis://127.0.0.1:6379/0' 
...
...

2. 사용법

@shared_task로 지정된 함수를 호출 하고 delay and get하면 된다.

from my_app import tasks # ex. from users import tasks
# OR from my_app.tasks import sum_numers
from users import models as user_models
...
...

class MyView(APIView):
	def get(self, request):
    	...
        ...
        sum_numbers_async = tasks.sum_number.delay(2, 4)
        # sum_numbers_async = sum_numbers.delay(2, 4)
        
        sum_numbers = sum_numbers_async.get()
        
        print(f"sum_numbers : {sum_numers}")
        
        return Response(...)
profile
포폴 및 이력서 : https://gisanglee.github.io/web-porfolio/

0개의 댓글