Celery Redis Django를 사용하여 웹사이트 비동기 작업 처리 프로세스 최적화

WBOY
풀어 주다: 2023-09-27 08:38:01
원래의
820명이 탐색했습니다.

使用Celery Redis Django优化网站异步任务处理流程

Celery Redis Django를 사용하여 웹사이트 비동기 작업 처리 프로세스 최적화

머리말:
웹사이트를 개발할 때 이메일 보내기, 보고서 생성, 데이터 크롤링 등과 같이 시간이 많이 걸리는 작업을 자주 접하게 됩니다. 이러한 작업이 동기식인 경우 작업이 완료되기를 기다리는 동안 사용자가 정지되어 사용자 경험이 악화됩니다. 이 문제를 해결하기 위해 비동기 작업을 사용하여 시간이 많이 걸리는 작업을 처리할 수 있으며, Celery는 현재 널리 사용되는 Python 비동기 작업 처리 프레임워크입니다.

Celery는 작업을 대기열에 넣고 Celery 작업자 노드(작업자)에 의해 비동기적으로 실행할 수 있는 분산 작업 대기열 프레임워크로, 이를 통해 작업의 비동기 실행을 달성합니다. Celery를 사용할 때 Redis는 Celery 작업을 전달하는 데 일반적으로 사용되는 메시지 브로커(Broker)입니다.

Celery Redis Django의 사용법을 더 잘 보여주기 위해 이 글에서는 이메일 보내기 기능을 예로 들어보겠습니다. 다음은 다음 부분으로 나누어 설명합니다.

1. 환경 준비
2. Celery 및 Redis 설치
3. Celery 구성
4. Django에서 비동기 작업 구현
5. Celery Worker 시작
6. 테스트 모듈 작성
7. 테스트 실행 및 요약

1. 환경 준비
개발을 시작하기 전에 Python, Django 및 Redis가 설치되어 있는지 확인해야 합니다. 설치되어 있지 않은 경우 pip를 통해 설치할 수 있습니다.

2. Celery 및 Redis 설치
$ pip install celery
$ pip install redis

3. Celery 구성
Django 프로젝트의 settings.py 파일에 다음 구성을 추가합니다.

Redis를 메시지 브로커로

BROKER_URL = 'redis ://localhost:6379/0'

작업 결과를 로컬에 저장

CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'

작업 모듈 정의

CELERY_IMPORTS = (

'your_app.tasks',
로그인 후 복사
로그인 후 복사

)

Set 기본 작업 대기열 이름

CELERY_DEFAULT_QUEUE = 'default'

4. Django에서 비동기 작업 구현
Django 프로젝트의 일부 앱에서Tasks.py 파일을 생성하여 비동기 작업의 기능을 저장합니다. 예를 들어 이메일 앱을 만든 다음 emails/tasks.py에 이메일을 보내기 위한 비동기 작업을 작성합니다.

emails/tasks.py

from celery import task
from django.core.mail import send_mail

@task()
def send_email_task(subject, message, from_email, receive_list):

send_mail(subject, message, from_email, recipient_list)
로그인 후 복사
로그인 후 복사

여기에 주목하세요 작업 데코레이터는 Celery에서 제공하며 함수를 Celery 작업으로 등록하는 데 사용됩니다.

5. Celery Worker 시작
터미널을 열고 Django 프로젝트의 루트 디렉터리로 전환한 후 다음 명령을 실행하여 Celery Worker를 시작합니다.

$ celery -A project_name 작업자 -l info

여기서 project_name은 Django 프로젝트의 이름입니다.

6. 테스트 모듈 작성
Django 프로젝트 내 앱의 views.py에 이메일 전송을 위한 뷰 함수를 작성하고, 해당 뷰 함수를 특정 URL에 바인딩하세요.

views.py

from django.shortcuts import render
from .tasks import send_email_task

def send_email_view(request):

if request.method == 'POST':
    subject = request.POST.get('subject')
    message = request.POST.get('message')
    from_email = request.POST.get('from_email')
    recipient_list = [request.POST.get('recipient_email')]
    
    # 调用异步任务
    send_email_task.delay(subject, message, from_email, recipient_list)
    
    return render(request, 'success.html')

return render(request, 'send_email.html')
로그인 후 복사

7 테스트 및 요약 실행
Django 프로젝트를 시작한 후 다음에 해당하는 send_email_view 뷰에 액세스하세요. URL 주소를 입력하고 해당 정보를 입력한 후 이메일 보내기 버튼을 클릭하세요.

이메일은 백그라운드에서 비동기적으로 전송되고 인터페이스는 프롬프트 메시지로 즉시 응답하므로 사용자는 이메일이 전송될 때까지 기다릴 필요가 없습니다. 이는 Celery Redis Django를 사용하여 구현된 비동기 작업 처리 프로세스입니다.

요약:
Celery Redis Django를 사용하면 웹사이트에서 비동기 작업 처리를 쉽게 구현할 수 있습니다. 시간이 많이 걸리는 작업을 Celery 비동기 작업에 투입함으로써 웹 사이트의 성능과 사용자 경험을 효과적으로 향상시킬 수 있습니다. 특정 사용 프로세스에서는 Celery를 설치 및 구성하고 작업 모듈을 정의한 다음 Django에서 비동기 작업 함수를 호출하여 비동기 처리를 수행해야 합니다. 다양한 작업자를 통해 다양한 작업을 동시에 처리할 수 있으므로 전체 시스템의 동시 처리 기능이 향상됩니다.
특정 코드 예:

settings.py

Redis를 메시지 브로커로

BROKER_URL = 'redis://localhost:6379/0'

작업 결과를 로컬에 저장

CELERY_RESULT_BACKEND = 'redis://localhost:6379 / 0'

작업 모듈 정의

CELERY_IMPORTS = (

'your_app.tasks',
로그인 후 복사
로그인 후 복사

)

기본 작업 대기열 이름 설정

CELERY_DEFAULT_QUEUE = 'default'

tasks.py

from celery import task
from django.core.mail import send_mail

@task()
def send_email_task(제목, 메시지, from_email, 수신자_목록):

send_mail(subject, message, from_email, recipient_list)
로그인 후 복사
로그인 후 복사

views.py

from django.shortcuts import render
from .tasks import send_email_task

def send_email_view(요청):

rrre 에

위 내용은 Celery Redis Django를 사용하여 웹사이트 비동기 작업 처리 프로세스 최적화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿