ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Celery + RabbitMQ + Django 연계 2
    파이썬(python2.7)/Django&REST 2015. 1. 10. 03:51

    *관련 포스팅 내용

    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의 기본 문서에 나와있는 내용입니다.


    일단 Django를 기반으로 하는 프로젝트의 구조가 아래와 같다고 가정하겠습니다.


    ........./ppp/
                      ┣ manage.py
                      ┗ ppp/
                                 ┣ __init__.py
                                 ┣ settings.py
                                 ┣ urls.py
                                 ┗ wsgi.py


    여기서 새로운 app으로 ggg라는 app을 만들어보면 다음과 같은 구조가 되겠죠.


    ........./ppp/
                      ┣ manage.py
                       ppp/
                      ┃       ┣ __init__.py
                             ┣ settings.py
                             ┣ urls.py
                             ┗ wsgi.py
                      ┗ ggg/
                                 ┣ __init__.py
                                 ┣ models.py
                                 ┣ views.py
                                 ┣ ....


    이런식으로 추가되었습니다. 


    여기에 몇 가지 파일을 추가함으로써 Celery에서 Task를 수행할 수 있습니다. 


    1. celery.py 를 생성해주세요. ..../ppp/ppp/ 하위에 위치해야 합니다. 소스코드는 아래와 같구요.


    vi ...../ppp/ppp/celery.py


    from __future__ import absolute_import


    import os


    from celery import Celery


    from django.conf import settings


    # set the default Django settings module for the 'celery' program.

    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'ggg.settings')


    app = Celery('ggg')   #여기서 ggg는 task를 포함하는 app이름이 되겠습니다.


    # Using a string here means the worker will not have to

    # pickle the object when using Windows.

    app.config_from_object('django.conf:settings')

    app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)



    @app.task(bind=True)

    def debug_task(self):

        print('Request: {0!r}'.format(self.request))


    2. ..../ppp/ppp/__init__.py 수정

    원래는 아무것도 작성되어 있지 않은 __init__.py 파일인데요. 그 안에 아래와 같은 소스코드를 추가해주세요.

    from __future__ import absolute_import

    # This will make sure the app is always imported when
    # Django starts so that shared_task will use this app.
    from .celery import app as celery_app

    3. 실제 task를 담고 있는 파일 생성... 저는 tasks.py로 생성했고 위치는 ggg 하위에 저장했습니다. 

    vi .../ppp/ggg/tasks.py

    from __future__ import absolute_import
    from celery import shared_task

    @shared_task
    def add(x, y):
        return x + y

    @shared_task
    def mul(x, y):
        return x * y

    @shared_task
    def xsum(numbers):
        return sum(numbers)



    이제 수행하면 되는데요. 

    Celery Task를 수행할 수 있는 Worker를 생성해줘야 합니다.
    터미널에서 아래 명령어로 Worker를 생성할 수 있고 상세한 Worker 설정은 Celery 홈페이지를 참고하시면 되겠습니다.

    python manage.py celeryd -l info

    수행방법은 views.py에서 tasks.py를 import하고 특정 주소로 사용자 요청이 왔을 때 tasks.py에 존재하는 함수를 호출하면 됩니다.
    예로 아래와 같습니다.

    import tasks

    def test(request):
      return HttpResponse(tasks.add.delay(2,5))

    주의할 점은 호출할 때 .deley로 호출한다는 겁니다.
    다른 방식으로도 호출할 수 있는데요. 그것도 Celery 홈페이지를 참고해주세요. 





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

    Celery Worker 1  (0) 2015.01.18
    Celery Args  (0) 2015.01.10
    Celery + RabbitMQ + Django 연계 3  (0) 2015.01.10
    Celery + RabbitMQ + Django 연계 2  (0) 2015.01.10
    Celery + RabbitMQ + Django 연계 1  (1) 2015.01.08
    Celery + RabbitMQ + Django 참조사이트  (0) 2015.01.08
    D005 - Django Static Files  (0) 2014.12.24
    D004 - TEMPLATE_DIRS... TemplateDoesNotExist Error  (0) 2014.12.22

    댓글 0

Designed by Tistory.