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'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
CELERY_IMPORTS = (
'your_app.tasks',
Set Name der Standardaufgabe-Warteschlange
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.pyfrom celery import taskfrom 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)
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
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.
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')
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.
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_IMPORTS = (
'your_app.tasks',
Legen Sie den Standardnamen für die Aufgabenwarteschlange fest
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)
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!