2016. 9. 27. 21:24 Web/Django

Django Celery 사용법

설치

  • pip install -U Celery

  • pip install django-celery

  • 데이터베이스 migration 필요. [djcelery를 위해]

Django 설정

  • settings.py에 아래 내용을 추가한다.

import djcelery

djcelery.setup_loader()

BROKER_URL = "amqp://guest:guest@localhost:5672//"

  • settings.py 파일에 추가

INSTALLED_APPS = (

'djcelery',

'myapp',

)

    • 두 가지를 추가해야 한다. myapp은 개발하고 있는 app의 이름이 되겠다.

Task 생성

from djcelery import celery

@celery.task(name='tasks.add')

def add(x,y):

 return x + y


@celery.task(name='tasks.sleeptask')

def sleeptask(i):

 from time import sleep

 sleep(i)

 return i

  • 테스트 목적으로 두 개의 task를 만들었다. 하나는 즉시 값을 리턴하는 add함수와 10초 뒤에 task를 반환하는 sleeptask 함수이다.

View 만들기

  • django app의 views.py에 아래의 내용을 추가

from django.http import HttpResponse

from myapp import tasks


def test_celery(request):

   result = tasks.sleeptask.delay(2)

   result2 = tasks.add.delay(2,5)

   return HttpResponse("this is task test (id : %s)"%result.id)


이렇게 view 만들어놓고 url view 호출할 있도록 해야한다.


urlpattern 아래 내용을 추가해준다.


import views as taskview


urlpatterns = patterns(

                      ...

                      url(r'^test$',taskview.test_celery),

                      )

가동

  • python manage.py celeryd -l info

직렬화

Consumer

주의 사항

  • 15672는 웹 포트다. 5672 포트로 연결해야 한다.

  • 연결이 RabbitMQ에서 끊어질 시에는 RabbitMQ 관리 웹 페이지에서 Can access virtual hosts가 설정되어있는 계정인지 확인해볼 것.

  • tasks로 만들어 던지는 함수에 req를 바로 던질 수 없다. pickle 가능한 object만 던져야 한다. 즉 파라미터들을 꺼내서 던져야 한다는 의미.

  user_no = int(req.session['user_no'])

  return tasks.celery.delay(user_no)

참고


'Web > Django' 카테고리의 다른 글

Django Celery 사용법  (0) 2016.09.27
Django 사용법 정리  (0) 2016.09.27
웹서버 중에서 Django를 선택한 이유  (0) 2016.09.27
Posted by 엘키 엘키

댓글을 달아 주세요


블로그 이미지
Software Engineer
엘키

공지사항

Yesterday31
Today29
Total1,605,483

달력

 « |  » 2020.8
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

글 보관함