시작하기
# 사용할 각 브로커에 따라 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}")
Django 실행 시 Celery app 실행 설정.
from .celery import app as celery_app __all__ = ("celery_app",)
장고에서 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'
REDIS_HOST=localhost REDIS_PW=my_redis_password
# 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