Celery with django - pai-plznw4me/django-initializer GitHub Wiki
1. redis docker (broker, Message Queue)
1.1 install redis docker
docker pull redis
1.2 run redis docker
docker run --name some-redis -d -p 6379:6379 redis
1.3 redis μλ νμΈνκΈ°
brew install redis
redis-cli ping
>>> PONG
reference
redis official installation guide
2. django setting
2.1 django_celery_results app μΆκ°
pip install celery
pip install django-celery-results
INSTALLED_APPS = [
...
'django_celery_results',
]
2.2 celery.py μΆκ°
|-project
|-project
|- celery.py <- μ¬κΈ°μλ€κ° μΆκ°νκΈ°
|- app
|- manage.py
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'β οΈνλ‘μ νΈμ΄λ¦.settings')
app = Celery('β οΈνλ‘μ νΈμ΄λ¦')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
2.3 celery-django setting
# CELERY setting
CELERY_BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_CACHE_BACKEND = 'django-cache'
CELERY_TIMEZONE = 'Asia/Seoul'
CELERY_TASK_TIME_LIMIT = 30 * 60
# pickle serialize
CELERY_ACCEPT_CONTENT = ['pickle', 'json']
CELERY_TASK_SERIALIZER = 'pickle'
2.4 init.py μ celery μμ μ½λ λ±λ‘
|-project
|-project
|- celery.py
|- __init__.py <- μ¬κΈ°μλ€κ° μΆκ°νκΈ°
|- app
|- manage.py
from .celery import app as celery_app
__all__ = ('celery_app', )
tasks.py
μμ± λ° celery task
μμ±
3. ν΄λΉ μμ μμλ celery task μ μνν΄ hello world μ μ°μ΄λ³Έλ€.
- project
|-app
|-tasks.py <- μ¬κΈ°μλ€κ° celery task λ±λ‘
3.1 tasks.py
@shared_task(bind=True)
def hello_celery(self, username):
print("hello" + username)
return 'done'
3.2 views.py
- view μ μ€ννκΈ° μν κΈ°λ³Έμ μΈ settingμ μλ΅νλ€.
def celery_test(requestNone):
username = 'song kim'
celery_id = hello_celery.delay(username)
print(celery_id)
return HttpResponse(200)
4. celery μ€ν
|-project
|-project
|- celery.py
|- __init__.py <- μ¬κΈ°μλ€κ° μΆκ°νκΈ°
|- app
|- manage.py
celery -A MARP worker -c 2 -l info
5. Result
- postman request
- django server μμ μ»μ console λ‘κ·Έ