Heim  >  Artikel  >  Backend-Entwicklung  >  Verwenden Sie Celery Redis Django, um den asynchronen Aufgabenverarbeitungsprozess der Website zu optimieren

Verwenden Sie Celery Redis Django, um den asynchronen Aufgabenverarbeitungsprozess der Website zu optimieren

WBOY
WBOYOriginal
2023-09-27 08:38:01763Durchsuche

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

Verwenden Sie Celery Redis Django, um den asynchronen Aufgabenverarbeitungsprozess der Website zu optimieren

Vorwort:
Bei der Entwicklung von Websites stoßen wir häufig auf zeitaufwändige Vorgänge, wie das Senden von E-Mails, das Erstellen von Berichten, das Crawlen von Daten usw. Wenn diese Vorgänge synchron sind, friert der Benutzer ein, während er auf den Abschluss des Vorgangs wartet, was die Benutzererfahrung verschlechtert. Um dieses Problem zu lösen, können Sie asynchrone Aufgaben verwenden, um zeitaufwändige Vorgänge abzuwickeln. Celery ist derzeit ein beliebtes Python-Framework für die asynchrone Aufgabenverarbeitung.

Celery ist ein Framework für verteilte Aufgabenwarteschlangen, das Aufgaben in die Warteschlange stellen und sie asynchron durch Celery-Worker-Knoten (Worker) ausführen kann, wodurch eine asynchrone Ausführung von Aufgaben erreicht wird. Bei der Verwendung von Celery ist Redis ein häufig verwendeter Nachrichtenbroker (Broker), der zur Bereitstellung von Celery-Aufgaben verwendet wird.

Um die Verwendung von Celery Redis Django besser zu demonstrieren, wird in diesem Artikel eine Funktion zum Senden von E-Mails als Beispiel verwendet. Das Folgende wird zur Erläuterung in folgende Teile unterteilt:

1. Umgebungsvorbereitung
2. Celery und Redis installieren
3. Celery konfigurieren
4. Asynchrone Aufgaben in Django implementieren
5. Celery Worker starten
6. Testmodule schreiben
7. Ausführen von Tests und Zusammenfassung

1. Vorbereitung der Umgebung
Bevor Sie mit der Entwicklung beginnen, müssen Sie sicherstellen, dass Python, Django und Redis installiert sind. Wenn es nicht installiert ist, können Sie es über pip installieren.

2. Installieren Sie Celery und Redis.
$ pip install celery = 'redis ://localhost:6379/0'

Aufgabenergebnisse lokal speichern


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

Aufgabenmodul definieren

CELERY_IMPORTS = (

'your_app.tasks',

)

Set Name der Standardaufgabe-Warteschlange

CELERY_DEFAULT_QUEUE = 'default'

4. Asynchrone Aufgaben in Django implementieren

Erstellen Sie in einigen Apps des Django-Projekts eine Datei „tasks.py“, um die Funktionen asynchroner Aufgaben zu speichern. Beispielsweise erstellen wir eine E-Mail-App und schreiben dann eine asynchrone Aufgabe zum Senden von E-Mails in 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, Receiver_list):

send_mail(subject, message, from_email, recipient_list)

Das sollte hier beachtet werden Der Task-Decorator wird von Celery bereitgestellt und dient zum Registrieren einer Funktion als Celery-Task.

5. Celery Worker starten
Öffnen Sie das Terminal, wechseln Sie in das Stammverzeichnis des Django-Projekts und führen Sie den folgenden Befehl aus, um Celery Worker zu starten.

$ celery -A project_name worker -l info

Wobei project_name der Name des Django-Projekts ist.

6. Schreiben Sie ein Testmodul

Schreiben Sie eine Ansichtsfunktion, die E-Mails in „views.py“ einer App im Django-Projekt sendet, und binden Sie die Ansichtsfunktion an eine bestimmte URL.

views.py

von django.shortcuts import render

von .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. Führen Sie Tests und eine Zusammenfassung aus

Starten Sie das Django-Projekt und greifen Sie dann auf die entsprechende send_email_view-Ansicht zu Geben Sie die URL-Adresse ein, geben Sie die relevanten Informationen ein und klicken Sie auf die Schaltfläche „E-Mail senden“.

Sie können beobachten, dass die E-Mail asynchron im Hintergrund gesendet wird und die Schnittstelle sofort mit einer Aufforderungsnachricht antwortet, sodass der Benutzer nicht auf den Versand der E-Mail warten muss. Dies ist der asynchrone Aufgabenverarbeitungsprozess, der mit Celery Redis Django implementiert wird.

Zusammenfassung:

Mit Celery Redis kann Django problemlos eine asynchrone Aufgabenverarbeitung auf der Website implementieren. Indem Sie zeitaufwändige Vorgänge in asynchrone Celery-Aufgaben integrieren, können Sie die Leistung und Benutzererfahrung Ihrer Website effektiv verbessern. Im spezifischen Verwendungsprozess müssen wir Celery installieren und konfigurieren, das Aufgabenmodul definieren und dann die asynchrone Aufgabenfunktion in Django aufrufen, um eine asynchrone Verarbeitung zu erreichen. Verschiedene Aufgaben können gleichzeitig von verschiedenen Mitarbeitern verarbeitet werden, wodurch die gleichzeitigen Verarbeitungsfähigkeiten des gesamten Systems verbessert werden.

Spezifisches Codebeispiel:


settings.py

Redis als Nachrichtenbroker

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

Aufgabenergebnisse lokal speichern

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

Aufgabenmodul definieren

CELERY_IMPORTS = (

'your_app.tasks',

)

Legen Sie den Standardnamen für die Aufgabenwarteschlange fest

CELERY_DEFAULT_QUEUE = 'default'

tasks.py

aus Sellerie-Importaufgabe

aus importieren send_mail

@task ()

def send_email_task (Betreff, Nachricht von_email, recicent_list):

send_mail(subject, message, from_email, recipient_list)

views.py

from django.shortcuts importieren render
from. äh

Das obige ist der detaillierte Inhalt vonVerwenden Sie Celery Redis Django, um den asynchronen Aufgabenverarbeitungsprozess der Website zu optimieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn