Heim > Artikel > Backend-Entwicklung > Lernen Sie Python Celery und erledigen Sie problemlos asynchrone Aufgaben
Obwohl moderne Webanwendungen schneller und komfortabler als je zuvor sind, gibt es immer noch viele Situationen, in denen schwere Aufgaben auf andere Teile des Systems verlagert werden müssen, anstatt am Haupt-Thread zu arbeiten.
Beispiele für diese Situationen sind wie folgt:
Wie geht man also mit diesen Situationen um? Zu diesem Zeitpunkt ist Sellerie praktisch.
Celery ist eine Open-Source-Implementierung von Aufgabenwarteschlangen, die häufig mit Python-basierten Web-Frameworks wie Flask und Django kombiniert wird, um Aufgaben außerhalb des typischen Anforderungs-Antwort-Zyklus asynchron auszuführen.
Celery ist also im Wesentlichen eine Aufgabenwarteschlange, die auf verteiltem Messaging basiert. Ausführungseinheiten oder Aufgaben werden mithilfe von Multiprocessing, Gevent oder Eventlets gleichzeitig auf einem oder mehreren Workern ausgeführt. Diese Aufgaben können synchron (d. h. warten, bis sie bereit sind) oder asynchron (d. h. im Hintergrund) ausgeführt werden.
Celery ist eine verteilte Aufgabenwarteschlange, die auf dem Producer-Consumer-Modell basiert.
Task Queue ist ein Mechanismus zum Verteilen von Arbeit auf Threads und Maschinen, im Wesentlichen ein Nachrichtenvermittler zwischen Produzenten (Webanwendungen) und Konsumenten (Celery-Worker).
Sellerie interagiert über Nachrichten, wobei Makler als Vermittler zwischen Kunden (Produzenten) und Arbeitern (Konsumenten) fungieren. Um eine Aufgabe zu starten, schiebt der Client eine Nachricht in die Warteschlange und der Broker übermittelt die Nachricht an den Worker.
Das Celery-System kann aus mehreren Arbeitern und Maklern bestehen, was die Möglichkeit einer hohen Verfügbarkeit und horizontalen Erweiterung bietet.
Kurz gesagt ist der Celery-Client der Produzent, der über den Message Broker neue Aufgaben zur Warteschlange hinzufügt. Anschließend erhalten Celery-Mitarbeiter über den Nachrichtenbroker auch neue Aufgaben aus der Warteschlange. Nach der Verarbeitung werden die Ergebnisse im Ergebnis-Backend gespeichert.
Das folgende Beispiel verwendet RedisMQ als Nachrichtenbroker.
Führen Sie auf einem Linux/MacOS-System den Redis-Server lokal aus, indem Sie den folgenden Befehl ausführen:
$ wget http://download.redis.io/redis-stable.tar.gz $ tar xvzf redis-stable.tar.gz $ rm redis-stable.tar.gz $ cd redis-stable $ make
Nach dem Einrichten von Redis führen Sie den Redis-Server aus, indem Sie den folgenden Befehl ausführen:
$ redis-server
Der Server läuft weiter der Standardport 6379.
Richten Sie zunächst das Python-Projekt lokal ein.
Celery kann über Standardtools wie pip oder easy_install installiert werden. Installieren Sie Celery und Redis über den folgenden Befehl:
pip install celery redis==4.3.4
Jetzt benötigen Sie eine Celery-Instanz, um die Anwendung auszuführen. Jede von Celery implementierte Aufgabe beginnt mit einer Instanz, wie zum Beispiel das Erstellen und Verwalten von Aufgaben.
Erstellen Sie eine Datei task.py im Projekt:
From celery import Celery broker_url = 'redi://localhost:6379/0' app = Celery('tasks',broker = broker_url) @app.task def add(x, y): return x+y
Hier wird eine einfache Aufgabe add() definiert, die die Summe zweier Zahlen zurückgibt.
Wechseln Sie auf dem Terminal zum Projektspeicherort und führen Sie den Celery Worker mit dem folgenden Befehl aus:
$ celery -A tasks worker - loglevel=info
Für weitere Informationen zur Celery Worker-Befehlszeile können Sie Hilfe verwenden:
$ celery worker - help
In Celery verwenden Sie die Methode „delay()“, um die Aufgabe aufzurufen.
Öffnen Sie ein weiteres Terminalfenster für Ihr Projekt und führen Sie den folgenden Befehl aus:
$ python
Dadurch wird die Python-Befehlszeile geöffnet.
>> from tasks import add >> add.delay(1,2)
Dadurch wird eine AsyncResult-Instanz zurückgegeben, die verwendet werden kann, um den Status der Aufgabe zu überprüfen, ihren Rückgabewert abzurufen, auf den Abschluss der Aufgabe zu warten und auch Ausnahmen und Tracebacks bei Fehlern abzurufen.
Nachdem der Befehl add.delay() ausgeführt wurde, wird die Aufgabe in die Warteschlange verschoben und dann vom Worker übernommen. Dies kann am Celery-Worker-Terminal überprüft werden, wo Sie deutlich sehen können, dass die Aufgabe empfangen und später erfolgreich abgeschlossen wird.
Das obige ist der detaillierte Inhalt vonLernen Sie Python Celery und erledigen Sie problemlos asynchrone Aufgaben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!