Django에서 Celerry를 사용하는 방법 단계
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 파일, 특히 주의: 항목이 같은 디렉터리에서해당 파일에 컨텐트 복사
두 곳의 내용을 수정하다
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
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를 사용하는 방법에 대한 절차 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보시기 바랍니다. 앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 라우팅 계층 URLconf 작용 및 원리 해석URL 구성(URLconf)은 Django가 지원하는 웹 사이트의 디렉토리와 같습니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 맵표입니다. 위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.