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()
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',)
from config.celery_conf import app
from celery import shared_task
@shared_task
def sum_numbers(x, y):
return x + y
...
...
# BROKER_URL = 'redis://redis:6379/0' For Docker
BROKER_URL = 'redis://127.0.0.1:6379/0'
...
...
@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(...)