概要
Django と Celery を連携してみました
公式のドキュメントだと django 側には celery 連携のドキュメントなく celery 側にあるようです
環境
- macOS 11.7.10
- Python 3.11.6
- Django 5.0.1
- celery 5.3.6
- Redis 7.2.1
mysite/settings.py
一部抜粋
# for celery
CELERY_CACHE_BACKEND = "default"
CELERY_BROKER_URL = "redis://localhost:6379"
polls/celery.py
import os
from celery import Celery
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
app = Celery("polls")
app.config_from_object("django.conf:settings", namespace="CELERY")
app.autodiscover_tasks()
@app.task(bind=True, ignore_result=True)
def debug_task(self):
print(f"Request: {self.request}")
polls/__init__.py
from .celery import app as celery_app
__all__ = ("celery_app",)
ワーカー起動
- pipenv run celery -A polls worker -l INFO
動作確認
-
pipenv run python manage.py shell
from polls.celery import debug_task
debug_task.apply_async()
最後に
連携自体はそれほど難しくないようです
設定やタスクは celery の公式にあるように記載しましたが別ファイルで管理してもいいかなと重ます
0 件のコメント:
コメントを投稿