Django에서 Celery 사용 정리

Published
October 29, 2024
Last updated
Last updated October 28, 2024
Tistory
Category
Tags

시작하기

# 사용할 각 브로커에 따라 pip install -U "celery[librabbitmq]" pip install -U "celery[redis]" pip install -U "celery[redis,sqs]" # 또는 Celery만 설치하기(비권장) pip install -U Celery

Django에서의 Celery 기본 설정

Celery app을 정의.
import os from celery import Celery # Set the default Django settings module for the 'celery' program. os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_app.settings") app = Celery("save_e") # Using a string here means the worker doesn't have to serialize # the configuration object to child processes. # - namespace='CELERY' means all celery-related configuration keys # should have a `CELERY_` prefix. app.config_from_object("django.conf:settings", namespace="CELERY") # Load task modules from all registered Django apps. app.autodiscover_tasks() @app.task(bind=True, ignore_result=True) def debug_task(self): print(f"Request: {self.request!r}")
myapp/celery.py
Django 실행 시 Celery app 실행 설정.
from .celery import app as celery_app __all__ = ("celery_app",)
myapp/__init__.py
장고에서 celery를 사용할 때는 어렵게 설정을 작성하지 않아도 settings.py에서 CELERY_ 로 시작되게 작성하면 설정이 적용된다. 해당 CELERY_는 위의 namespace에 정의된 값으로, 변경 가능하다.
# 일반적인 설정 정의 accept_content = ['json'] # 장고에서의 설정 정의 CELERY_ACCEPT_CONTENT = ['json']

Redis를 브로커로 사용할 때

REDIS_HOST = os.environ.get('REDIS_HOST') REDIS_PORT = int(os.environ.get('REDIS_PORT', 6379)) REDIS_PW = os.environ.get('REDIS_PW') # Celery CELERY_BROKER_URL = f'redis://:{REDIS_PW}@{REDIS_HOST}:{REDIS_PORT}' CELERY_RESULT_BACKEND = CELERY_BROKER_URL CELERY_ACCEPT_CONTENT = ['json'] CELERY_TASK_SERIALIZER = 'json'
settings.py
REDIS_HOST=localhost REDIS_PW=my_redis_password
.env
# redis 도커 인스턴스 실행 docker run -d \ --name redis-server \ -p 6379:6379 \ -e REDIS_PASSWORD=my_redis_password \ redis:latest redis-server --requirepass my_redis_password # celery worker 실행하기(redis등 브로커 실행후 가능) celery -A <앱이름> worker -l INFO # redis-cli 실행하기 docker exec -it redis-server redis-cli
 

AWS SQS를 브로커로 사용할 때

 
 

django-celery-beat

 
 

Reference