So implementieren Sie eine asynchrone Aufgabenwarteschlange mit Celery, Redis und Django

WBOY
Freigeben: 2023-09-27 23:18:22
Original
1205 Leute haben es durchsucht

So implementieren Sie eine asynchrone Aufgabenwarteschlange mit Celery, Redis und Django

So implementieren Sie eine asynchrone Aufgabenwarteschlange mit Celery, Redis und Django

Einführung:
In der Webentwicklung müssen wir häufig einige langfristige Aufgaben erledigen, z. B. E-Mails senden, Berichte erstellen, große Datenmengen verarbeiten, usw. Wenn diese Aufgaben direkt in der Ansichtsfunktion erledigt werden, ist die Antwortzeit der Anfrage zu lang und die Benutzererfahrung ist schlecht. Um die Leistung und Reaktionsgeschwindigkeit des Systems zu verbessern, können wir asynchrone Aufgabenwarteschlangen verwenden, um diese zeitaufwändigen Aufgaben zu erledigen. Celery ist ein weit verbreitetes asynchrones Task-Queue-Framework für Python und Redis ist seine Standard-Nachrichten-Middleware. In diesem Artikel wird erläutert, wie Sie mit Celery, Redis und Django eine asynchrone Aufgabenwarteschlange implementieren, und es werden spezifische Codebeispiele bereitgestellt.

Schritt 1: Celery, Redis und Django installieren
Wir müssen zuerst Celery, Redis und Django installieren und relevante Konfigurationen in der Django-Konfigurationsdatei vornehmen.

  1. Celery installieren: Führen Sie den folgenden Befehl in der Befehlszeile aus, um Celery zu installieren:
$ pip install Celery
Nach dem Login kopieren
  1. Redis installieren: Celery verwendet standardmäßig Redis als Nachrichten-Middleware. Wir müssen Redis installieren und sicherstellen, dass der Redis-Server ausgeführt wird.
  2. Django konfigurieren: Fügen Sie der Django-Konfigurationsdatei (settings.py) die folgende Konfiguration hinzu:
# 使用Redis作为消息中间件
CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
Nach dem Login kopieren

Schritt 2: Erstellen Sie eine Celery-Aufgabe
Als nächstes müssen wir eine Celery-Aufgabe erstellen und die entsprechende Aufgabenfunktion definieren. Erstellen wir beispielsweise eine Aufgabe zum Versenden von E-Mails.

  1. Erstellen Sie eine Datei mit dem Namen „tasks.py“ im Django-Projektverzeichnis und fügen Sie den folgenden Code hinzu:
from celery import shared_task
from django.core.mail import send_mail

@shared_task
def send_email_task(subject, message, from_email, recipient_list):
    send_mail(subject, message, from_email, recipient_list)
Nach dem Login kopieren
  1. Rufen Sie die Celery-Aufgabe in der Ansichtsfunktion von Django auf:
from .tasks import send_email_task

def send_email_view(request):
    # 获取邮件的相关参数
    subject = 'Test Email'
    message = 'This is a test email.'
    from_email = 'sender@example.com'
    recipient_list = ['recipient@example.com']
    
    # 调用Celery任务
    send_email_task.delay(subject, message, from_email, recipient_list)
    
    return HttpResponse('Email sent!')
Nach dem Login kopieren

Schritt 3: Starten Sie den Celery-Worker.
Celery wird ausgeführt eine verteilte Architektur, in der mehrere Mitarbeiter für die Bearbeitung von Aufgaben verantwortlich sind. Wir müssen Celery-Worker in der Befehlszeile starten, um Aufgaben in der Aufgabenwarteschlange zu verarbeiten.

Führen Sie den folgenden Befehl aus, um den Worker zu starten:

$ celery -A your_project_name worker -l info
Nach dem Login kopieren

Hinweis: Ersetzen Sie „Ihr_Projektname“ durch den Namen Ihres Django-Projekts.

Schritt 4: Führen Sie den Django-Server aus
Bevor wir den Celery-Worker starten, müssen wir den Django-Server ausführen. Führen Sie den folgenden Befehl im Stammverzeichnis des Projekts aus:

$ python manage.py runserver
Nach dem Login kopieren

Jetzt können Sie auf die entsprechende Ansichtsfunktion im Browser zugreifen und Celerys Protokoll beobachten, um die Ausführung der Aufgabe zu sehen.

Zusammenfassung:
Durch die Verwendung von Celery, Redis und Django können wir problemlos asynchrone Aufgabenwarteschlangen implementieren. Indem wir zeitaufwändige Aufgaben in die Aufgabenwarteschlange stellen, können wir die Leistung und Reaktionsgeschwindigkeit des Systems erheblich verbessern und das Benutzererlebnis verbessern. Gleichzeitig ermöglicht uns die verteilte Architektur von Celery, die Verarbeitungsfähigkeiten des Systems flexibel zu erweitern. Ich hoffe, dieser Artikel hilft Ihnen zu verstehen, wie Sie asynchrone Aufgabenwarteschlangen mit Celery, Redis und Django implementieren.

Referenzlinks:

  • Offizielle Dokumentation von Celery: https://docs.celeryproject.org/en/stable/index.html
  • Offizielle Dokumentation von Django: https://docs.djangoproject.com/

Das obige ist der detaillierte Inhalt vonSo implementieren Sie eine asynchrone Aufgabenwarteschlange mit Celery, Redis und Django. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!