설치
| 1
2
3
 | pip install -U Celery
pip install django-celery
# 데이터베이스 migration 필요. [djcelery를 위해]
 | 
Django 설정
  - settings.py에 아래 내용을 추가한다.
| 1
2
3
4
5
 | import djcelery
djcelery.setup_loader()
BROKER_URL = "amqp://guest:guest@localhost:5672//"
 | 
| 1
2
3
4
 | INSTALLED_APPS = (
'djcelery',
'myapp',
)
 | 
  - 두 가지를 추가해야 한다. myapp은 개발하고 있는 app의 이름이 되겠다.
Task 생성
| 1
2
3
4
5
6
7
8
9
10
 | 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 만들기
| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 | # 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),
                        )
 | 
가동
| 1
 | 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)
 
 
 
Pycharm Celery 디버깅 설정

참고