Django에서 Celerry를 사용하는 방법 단계

5316 단어 DjangoCelery
(1), 개요
Celerry는 단순하고 유연하며 신뢰할 수 있는 다중 작업 기반의 분포식 시스템으로 운영을 위해 이 시스템을 유지하는 도구를 제공합니다.실시간 처리에 전념하는 작업 대기열은 작업의 스케줄링도 지원합니다.실행 단위는 작업 (task) 이며, 다중 루틴을 이용하여 이 작업은 단일 또는 여러 개의 작업 (worker) 에서 동시에 실행될 수 있습니다.
Celerry는 메시지 메커니즘을 통해 통신하며, 일반적으로 중개인(broker)을 통해 클라이언트와 워킹 서버(worker) 간의 통신을 분배하고 조절한다.클라이언트가 메시지를 보내면 중개인이 메시지를 한 직무에 분배하고 마지막에 직무가 이 임무를 수행한다.
Celerry는 고가용성 및 확장성을 향상시키는 여러 직종과 브로커를 지원합니다.
Celery는python 언어로 개발되었지만, 이 프로토콜은 모든 언어로 실행할 수 있습니다. 예를 들어 Django의 Celerry, node의 node-celery와 php의 celery-php
(2), Django에서 Celerry를 사용하는 프로세스 및 구성
Celerry 가져오기:pip3 install Celery프로젝트와 같은 디렉터리에celery를 만듭니다.py 파일, 특히 주의: 항목이 같은 디렉터리에서
해당 파일에 컨텐트 복사
두 곳의 내용을 수정하다
  • os.environ.setdefault('DJANGO_SETTINGS_MODULE','proj.settings')의 proj를 프로젝트 이름으로 변경합니다
  • app = Celery('pro')의 pro가 프로젝트 이름으로 변경되었습니다
  • 
    import os
    
    from celery import Celery
    
    # set the default Django settings module for the 'celery' program.
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')
    
    app = Celery('pro')
    
    # Using a string here means the worker doesn't have to serialize
    # the configuration object to child processes.
    # - namespace='CELERY' means all celery-related configuration keys
    #  should have a `CELERY_` prefix.
    app.config_from_object('django.conf:settings', namespace='CELERY')
    
    # Load task modules from all registered Django app configs.
    app.autodiscover_tasks()
    
    
    @app.task(bind=True)
    def debug_task(self):
      print(f'Request: {self.request!r}')
    프로젝트와 이름이 같은 디렉토리의 __init__.py 파일에 내용 추가
    
    # 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
    
    __all__ = ('celery_app',)
    
    
    설정 중입니다.py 파일에 설정 추가
  • CELERY_BROKER_URL: 브로커 URL, redis 또는 RabbitMQ 구성 가능
  • CELERY_RESULT_BACKEND: 결과의 스토리지 주소를 반환합니다
  • CELERY_ACCEPT_CONTENT: 수신 내용의 형식은 두 가지로 나뉘는데 그것이 바로 json과 msgpack이다.msgpack은 json 형식의 데이터 부피보다 작고 전송 속도가 빠릅니다
  • CELERY_TASK_SERIALIZER: 작업 하중의 서열화 방식 -->json
  • CELERY_TIMEZONE
  • CELERY_TASK_TRACK_STARTED: 작업 추적을 켜는지 여부
  • CELERY_TASK_TIME_LIMIT: 작업 시간 초과 제한
  • 
    # Celery 
    CELERY_BROKER_URL = env("CELERY_BROKER_URL")
    CELERY_RESULT_BACKEND = env("CELERY_RESULT_BACKEND")
    CELERY_ACCEPT_CONTENT = ["json", "msgpack"]
    CELERY_TASK_SERIALIZER = "json"
    CELERY_TIMEZONE = "Asia/Shanghai"
    CELERY_TASK_TRACK_STARTED = True
    CELERY_TASK_TIME_LIMIT = 30 * 60
    
    앱에서 tasks를 만듭니다.py 파일, 메시지 보내기 기능 만들기, 작업 방법은 장식기를 추가해야 합니다: @shared_task
    
    from rest_framework.response import Response
    from rest_framework.generics import GenericAPIView
    from time import sleep
    from celery import shared_task
    
    class TestView3(GenericAPIView):
    
      @classmethod
      @shared_task
      def sleep(self, duration):
        sleep(duration)
        return Response(" ", status=200)
    
    
    뷰 및 라우팅 작성
    
    ### views.py
    from .tasks import TestView3
    class TestView1(GenericAPIView):
      def get(self, request):
        TestView3.sleep(10)
        return Response("celery ")
    test_view_1 = TestView1.as_view()
    
    ### urls.py
    from django.urls import path
    from .views import (
      test_view_1
    )
    
    urlpatterns = [
      path('celery/', test_view_1, name="test1")
    ]
    
    
    redis 설치 및 시작
    django 프로젝트 시작
    Celery 명령을 사용하여 Celery 서비스를 시작합니다. 명령:celery-A 프로젝트명worker-l info입니다. 아래와 같이 시작하면 시작됩니다.
    
    [email protected] v5.0.3 (singularity)
    
    Darwin-20.1.0-x86_64-i386-64bit 2020-12-05 20:52:17
    
    [config]
    .> app:     drf_email_project:0x7f84a0c4ad68
    .> transport:  redis://127.0.0.1:6379/1%20
    .> results:   redis://127.0.0.1:6379/2
    .> concurrency: 4 (prefork)
    .> task events: OFF (enable -E to monitor tasks in this worker)
    
    [queues]
    .> celery      exchange=celery(direct) key=celery
    
    
    [tasks]
     . drf_email_project.celery.debug_task
     . users.tasks.sleep
    
    [2020-12-05 20:52:18,166: INFO/MainProcess] Connected to redis://127.0.0.1:6379/1%20
    [2020-12-05 20:52:18,179: INFO/MainProcess] mingle: searching for neighbors
    [2020-12-05 20:52:19,212: INFO/MainProcess] mingle: all alone
    [2020-12-05 20:52:19,248: WARNING/MainProcess] /Users/apple/drf-email/lib/python3.7/site-packages/celery/fixups/django.py:204: UserWarning: Using settings.DEBUG leads to a memory
          leak, never use this setting in production environments!
     leak, never use this setting in production environments!''')
    
    [2020-12-05 20:52:19,249: INFO/MainProces
    
    Django에서 Celerry를 사용하는 방법에 대한 이 글은 여기까지 소개되었습니다. 더 많은 Django에서 Celerry를 사용하는 방법에 대한 절차 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보시기 바랍니다. 앞으로 많은 응원 부탁드립니다!

    좋은 웹페이지 즐겨찾기