Celery, Redis und Django werden zusammen verwendet, um die Effizienz der asynchronen Aufgabenverarbeitung zu verbessern

PHPz
Freigeben: 2023-09-28 18:27:24
Original
926 Leute haben es durchsucht

Celery, Redis und Django werden zusammen verwendet, um die Effizienz der asynchronen Aufgabenverarbeitung zu verbessern

Celery, Redis und Django werden zusammen verwendet, um die Effizienz der asynchronen Aufgabenverarbeitung zu verbessern.

Einführung: Bei der Entwicklung von Webanwendungen stoßen wir häufig auf einige zeitaufwändige Aufgaben, die verarbeitet werden müssen. Wenn diese Aufgaben direkt im Anforderungsverarbeitungsprozess ausgeführt werden, führt dies dazu, dass der Benutzer zu lange wartet, was sich äußerst negativ auf die Benutzererfahrung auswirkt. Um dieses Problem zu lösen, können wir Celery, Redis und Django verwenden, um zeitaufwändige Aufgaben asynchron zu verarbeiten und so die Systemleistung und Benutzererfahrung zu verbessern.

  1. Einführung und Installation von Celery
    Celery ist eine Aufgabenwarteschlange, die auf verteiltem Messaging basiert und auch die Aufgabenplanung unterstützt. Die Installation von Celery kann über den Befehl pip abgeschlossen werden:

    pip install celery
    Nach dem Login kopieren
  2. Einführung und Installation von Redis
    Redis ist eine Open-Source-In-Memory-Datenbank, die eine Vielzahl von Datenstrukturen und eine Vielzahl von Anwendungsszenarien unterstützt. In unserem Szenario wird Redis hauptsächlich als Backend-Speicherimplementierung der Aufgabenwarteschlange verwendet. Die Installation von Redis kann durch die folgenden Schritte abgeschlossen werden:
  3. Laden Sie Redis herunter und entpacken Sie es.
  4. Geben Sie das dekomprimierte Verzeichnis ein und verwenden Sie den Befehl „make“ zum Kompilieren.
  5. Verwenden Sie den Befehl „make install“, um die
  6. Django-Konfiguration zu installieren Legen Sie die Einstellungen des Django-Projekts fest. Fügen Sie Celery-Konfigurationselemente zur .py-Datei hinzu, wie unten gezeigt:

    # settings.py
    
    # Celery配置
    CELERY_BROKER_URL = 'redis://localhost:6379/0'
    CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
    CELERY_ACCEPT_CONTENT = ['json']
    CELERY_TASK_SERIALIZER = 'json'
    CELERY_RESULT_SERIALIZER = 'json'
    Nach dem Login kopieren

    In der obigen Konfiguration geben CELERY_BROKER_URL und CELERY_RESULT_BACKEND die Adresse an und Port von Redis, die als Aufgaben-Backend für Warteschlangen und Ergebnisspeicherung verwendet werden.

    CELERY_BROKER_URLCELERY_RESULT_BACKEND指定了Redis的地址和端口,用来作为任务队列和结果存储的后端。

接下来,在项目的urls.py文件中添加Celery的配置,如下所示:

# urls.py

from django.urls import path
from .views import AsyncTaskView

urlpatterns = [
    path('async-task/', AsyncTaskView.as_view(), name='async_task'),
]
Nach dem Login kopieren
  1. 创建任务函数
    在Django的app中创建tasks.py文件,并在其中定义异步任务的函数。下面是一个示例代码:

    # app/tasks.py
    
    from celery import shared_task
    import time
    
    @shared_task
    def process_task():
     # 模拟任务处理过程(等待5秒)
     time.sleep(5)
     return 'Task completed'
    Nach dem Login kopieren

    在上述代码中,@shared_task装饰器用于将函数转换为Celery的任务函数。

  2. 视图实现
    在Django的views.py文件中定义一个视图类,用于接收请求并调用异步任务函数。下面是一个示例代码:

    # app/views.py
    
    from django.views import View
    from .tasks import process_task
    from django.http import HttpResponse
    
    class AsyncTaskView(View):
     def get(self, request):
         # 调用异步任务
         task = process_task.delay()
         return HttpResponse('Task started')
    Nach dem Login kopieren
  3. 启动Celery服务
    使用以下命令来启动Celery的工作进程:

    celery -A your_project_name worker --loglevel=info
    Nach dem Login kopieren

    注意将your_project_name替换为你的Django项目名称。

  4. 测试
    在浏览器中访问http://localhost:8000/async-task/
Als nächstes fügen Sie Celerys Konfiguration wie folgt in die Datei urls.py des Projekts ein:

rrreee

    🎜Erstellen Sie die Aufgabenfunktion.🎜Erstellen Sie die Datei „task.py“ in der Django-App und definieren Sie die Funktion der darin enthaltenen asynchronen Aufgabe. Hier ist ein Beispielcode: 🎜rrreee🎜Im obigen Code wird der Dekorator @shared_task verwendet, um die Funktion in eine Celery-Aufgabenfunktion umzuwandeln. 🎜🎜🎜🎜View-Implementierung🎜Definieren Sie eine View-Klasse in der Datei „views.py“ von Django, um Anfragen zu empfangen und asynchrone Aufgabenfunktionen aufzurufen. Hier ist ein Beispielcode: 🎜rrreee🎜🎜🎜Starten Sie den Celery-Dienst. 🎜Verwenden Sie den folgenden Befehl, um den Celery-Worker-Prozess zu starten: 🎜rrreee🎜Ersetzen Sie your_project_name durch den Namen Ihres Django-Projekts. 🎜🎜🎜Test🎜Besuchen Sie http://localhost:8000/async-task/ im Browser. Wenn alles gut geht, sehen Sie als Ergebnis „Aufgabe gestartet“. Zu diesem Zeitpunkt wurde die Aufgabe asynchron im Hintergrund verarbeitet und blockiert die Anforderungsverarbeitung des Benutzers nicht. 🎜🎜🎜Fazit: Durch die Kombination von Celery, Redis und Django können wir zeitaufwändige Aufgaben asynchron verarbeiten und so die Systemleistung und Benutzererfahrung verbessern. Celery erleichtert die Verwaltung von Aufgabenwarteschlangen und die Aufgabenplanung, während Redis als Backend-Speicher eine zuverlässige Speicherung von Aufgabendaten ermöglicht. Diese Lösung kann in großem Umfang bei der Entwicklung von Webanwendungen eingesetzt werden und ihr Implementierungsprozess wird anhand spezifischer Codebeispiele demonstriert. 🎜

Das obige ist der detaillierte Inhalt vonCelery, Redis und Django werden zusammen verwendet, um die Effizienz der asynchronen Aufgabenverarbeitung zu verbessern. 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