*관련 포스팅 내용

Celery + RabbitMQ + Django 참조사이트 : http://ngee.tistory.com/540

Celery + RabbitMQ + Django 연계 1        : http://ngee.tistory.com/542

Celery + RabbitMQ + Django 연계 2        : http://ngee.tistory.com/548

Celery + RabbitMQ + Django 연계 3        : http://ngee.tistory.com/549

Celery Args                                                : http://ngee.tistory.com/550

Celery Worker                                           : http://ngee.tistory.com/563

Celery Worker2                                         : http://ngee.tistory.com/564
Celery Logging                                          : http://ngee.tistory.com/567
Celery Flower                                            : http://ngee.tistory.com/566
Celery Return Value                                  : http://ngee.tistory.com/580


Celery는 공부할 것이 참 많아요. 아직도 많이 부족하지만 또 까먹지 않기 위해서 포스팅을 하나 추가합니다. 


*   task에서 return 하는 것도 비동기로 이뤄진다.

** return value를 임시로 저장해둘 backend를 설정해줘야한다. 


위와 같은 사항을 염두해두고 아래 내용을 읽으시면 도움이 될 것으로 생각됩니다.


1. Django settings.py에 Celery 관련 설정추가


**에 작성한 것 처럼 backend를 설정하기 위한 내용입니다. 


CELERY_RESULT_BACKEND = 'amqp://'   #backend로 설정할 수 있는 녀석들은 amqp, Memcached, Redis, MongoDB 등이 있네요. 

CELERY_TASK_RESULT_EXPIRES = 1000  #적당한 숫자, 요 시간이 지나면 저장된 return value가 삭제

CELERY_TASK_SERIALIZER = 'json'           #기본 값은 pickle이라네요. json, yaml, msgpack 혹은 커스텀 serializer를 사용할 수 있네요.

CELERY_RESULT_SERIALIZER = 'json'       #기본 값은 pickle이라네요. json, yaml, msgpack 혹은 커스텀 serializer를 사용할 수 있네요.

CELERY_ACCEPT_CONTENT=['json']      


yaml도 모르고, pickle도 모르고, msgpack도 모르니깐 json으로 설정해줍니다. ㅎㅎ 나중에 좀 찾아봐야겠어요.


여러 설정에 대한 자세한 내용은 다음 웹페이지를 참고하셔요.  http://celery.readthedocs.org/en/latest/configuration.html


2. return 값을 받아봅시다.


!    task에서 return은 아무거나 해주시구요.

!    task를 호출할 때 delay() 또는 apply_async() 를 사용하자나요.  요것들은 기본적으로 id 값을 리턴하더라구요.

     즉 아래와 같이 id 값을 받아 둘 수 있겠죠.


     result = taskblah.blah.delay(arg1, arg2) 

     print result  # 출력해보시면 id 값이 들어가 있는 것을 확인 할 수 있습니다. 


!    위에서 리턴 받은 id 값을 가지고 backend로 설정한 것에 접근해서 저장된 값을 가져오는 것 같아요. 예상입니다. ㅎㅎ

      result.ready() 를 통해서 task가 끝나서 값을 return 했는지 확인이 가능한데요. backend에 저장하면 ready() 함수가 True를 리턴하구요.

      아직 저장하지 않은 상태면 False를 리턴해줍니다.


!    즉 result.ready()를 통해 True가 나오면 값을 가져오면됩니다. 

     값을 가져오는 함수는 result.get()  이라는 함수구요.


참고 웹 페이지 : http://celery.readthedocs.org/en/latest/getting-started/first-steps-with-celery.html


종합해볼 때 아래와 같은 소스로 return 값을 가져올 수 있습니다. 


result = taskblah.blah.delay(arg1, arg2) 


while result.ready() == False :

  time.sleep(1)

  print result.ready()

  print "sleep!!! wake??"


print "yes!! wake!!!"

print result.get()




'파이썬(python2.7) > Django&REST' 카테고리의 다른 글

Django Forms(001) - init  (0) 2015.06.15
Celery + Django 연계에서 내가 실수한 부분  (0) 2015.05.31
Apache + Django Setting Tip  (0) 2015.04.10
Celery Return Value (Ready and Get function)  (0) 2015.01.26
Celery Flower install and access  (0) 2015.01.20
Celery Logging  (0) 2015.01.20
Celery Worker 2  (0) 2015.01.18
Celery Worker 1  (0) 2015.01.18

+ Recent posts