Celery ist eine Task-Queue-Implementierung für Python-Webanwendungen, die dazu dient, Arbeit außerhalb des HTTP-Request-Response-Zyklus asynchron auszuführen.
Warum ist Celery nützlich?
Task-Queues und insbesondere die Celery-Implementierung sind einer der schwieriger zu verstehenden Teile eines Python-Webanwendungs-Stacks.
Wenn Sie ein Nachwuchsentwickler sind, kann es unklar sein, warum es wichtig ist, den HTTP-Anfrage-Antwort-Zyklus zu überwinden. Kurz gesagt, Sie wollen, dass Ihr WSGI-Server auf eingehende Anfragen so schnell wie möglich antwortet, weil jede Anfrage einen Worker-Prozess bindet, bis die Antwort fertig ist. Die Auslagerung der Arbeit von diesen Workern durch asynchrone Jobs als Aufgaben in einer Warteschlange ist eine einfache Möglichkeit, die Reaktionszeiten des WSGI-Servers zu verbessern.
Was ist der Unterschied zwischen Celeryd und Celerybeat?
Celery kann verwendet werden, um Batch-Jobs im Hintergrund nach einem bestimmten Zeitplan auszuführen. Ein Schlüsselkonzept in Celery ist der Unterschied zwischen dem Celery-Daemon (celeryd), der Aufgaben ausführt, und Celerybeat, der ein Scheduler ist. Stellen Sie sich Celeryd als einen Tunnelblicksatz von einem oder mehreren Workern vor, die alle Aufgaben erledigen, die Sie ihnen vorsetzen. Jeder Worker führt eine Aufgabe aus, und wenn diese abgeschlossen ist, übernimmt er die nächste Aufgabe.
Dieser Zyklus wiederholt sich ständig und wartet nur, wenn es keine weiteren Aufgaben mehr gibt, die vor ihm liegen.
Celerybeat hingegen ist wie ein Chef, der den Überblick darüber behält, wann eine Aufgabe ausgeführt werden sollte. Ihre Anwendung kann Celerybeat anweisen, eine Aufgabe in bestimmten Zeitintervallen auszuführen, z. B. alle 5 Sekunden oder einmal in der Woche. Celerybeat kann auch angewiesen werden, Aufgaben an einem bestimmten Datum oder zu einer bestimmten Uhrzeit auszuführen, z. B. jeden Sonntag um 17:03 Uhr. Wenn das Intervall oder die bestimmte Uhrzeit erreicht ist, übergibt Celerybeat den Auftrag an Celeryd, damit er vom nächsten verfügbaren Worker ausgeführt wird.
Celery-Tutorials und Ratschläge
Celery ist ein leistungsfähiges Werkzeug, das anfangs schwer zu verstehen sein kann. Informieren Sie sich über das Konzept der Aufgabenwarteschlange und tauchen Sie dann in diese speziellen Celery-Tutorials ein.
-
A 4 Minute Intro to Celery ist ein kurzer Screencast zur Einführung in die Aufgabenwarteschlange.
-
Diese Blogpostserie über die Architektur von Celery, Celery in der freien Wildbahn: Tipps und Tricks zum Ausführen von asynchronen Tasks in der realen Welt und der Umgang mit ressourcenintensiven Tasks auf Celery bieten einen großartigen Kontext für die Funktionsweise von Celery und den Umgang mit einigen der schwierigeren Teile der Arbeit mit der Task Queue.
-
How to use Celery with RabbitMQist eine detaillierte Anleitung für die Verwendung dieser Tools auf einem Ubuntu VPS.
-
Celery – Best Practiceserläutert Dinge, die man mit Celery nicht tun sollte und zeigt einige wenig genutzte Funktionen, um die Arbeit mit Task-Warteschlangen zu erleichtern.
-
Celery Best Practicesist die Fortsetzung des obigen Best Practices-Beitrags eines anderen Autors, der auf einigen seiner eigenen Erfahrungen aus mehr als 3 Jahren Celery-Nutzung aufbaut.
-
Common Issues Using Celery (And Other Task Queues)enthält gute Ratschläge zu Fehlern, die Sie in Ihren Aufgabenkonfigurationen vermeiden sollten, z. B. die Verwendung von Datenbanktransaktionen und die Wiederholung fehlgeschlagener Aufgaben.
-
Asynchrone Verarbeitung in Webanwendungen Teil 1 und Teil 2 sind sehr lesenswert, um den Unterschied zwischen einer Task-Warteschlange zu verstehen und um zu verstehen, warum Sie Ihre Datenbank nicht als solche verwenden sollten.
-
Meine Erfahrungen mit einem langlaufenden Celery-basierten Mikroprozess geben einige gute Tipps und Ratschläge, die auf Erfahrungen mit Celery-Workern basieren, die sehr lange brauchen, um ihre Aufgaben zu erledigen.
-
Checklist to build great Celery async tasksist eine Seite, die speziell dafür entwickelt wurde, Ihnen eine Liste guter Praktiken an die Hand zu geben, die Sie beim Entwurf Ihrer Task-Queue-Konfiguration und beim Einsatz in Entwicklungs-, Staging- und Produktionsumgebungen beachten sollten.
-
Heroku hat darüber geschrieben, wie man Celery absichert, wenn Aufgaben sonst über unverschlüsselte Netzwerke gesendet werden.
-
Unit Testing Celery tasksexplains three strategies for testing code within functions that Celeryexecutes. Der Beitrag kommt zu dem Schluss, dass der synchrone Aufruf von Celery-Tasks zum Testen die beste Strategie ist, die keine Nachteile hat. Beachten Sie jedoch, dass jede Testmethode, die nicht mit der Ausführung der Funktion in einer Produktionsumgebung übereinstimmt, potenziell zu übersehenen Fehlern führen kann. Es gibt auch ein Open-Source-Git-Repository mit dem gesamten Quellcode des Beitrags.
-
Rollbar-Überwachung von Celery in einer Django-AnwendungErklärt, wie man Rollbar zur Überwachung von Aufgaben verwendet. Supernützlich, wenn Worker ohne ersichtlichen Grund sterben.
-
3 Gotchas for Working with Celeryare things to keep in mind when you’re new to the Celery task queueimplementation.
-
Dask and Celerycompares Dask.distributed with Celery for Python projects. Der Beitrag gibt Code-Beispiele, um zu zeigen, wie man Aufgaben mit beiden Task-Queues ausführt.
-
Python+Celery: Chaining jobs…erklärt, dass Celery-Aufgaben mit Hilfe vonCelery-Ketten voneinander abhängig sein sollten, nicht aber direkte Abhängigkeiten zwischen Aufgaben.
Celery mit Web-Frameworks
Celery wird typischerweise mit einem Web-Framework wieDjango, Flask oder Pyramid verwendet.Diese Ressourcen zeigen Ihnen, wie Sie die Celery-Task-Queue mit dem Web-Framework Ihrer Wahl integrieren können.
-
How to Use Celery and RabbitMQ with Djangois ist ein großartiges Tutorial, das zeigt, wie man eine Basis-Task mit Django installiert und einrichtet.
-
Miguel Grinberg hat einen schönen Beitrag über die Verwendung der Aufgabenwarteschlange Celery mit Flask geschrieben, in dem er einen Überblick über Celery gibt, gefolgt von spezifischem Code, um die Aufgabenwarteschlange einzurichten und in Flask zu integrieren.
-
Setting up an asynchronous task queue for Django using Celery and Redisis a straightforward tutorial for setting up the Celery task queue forDjango web applications using the Redis broker on the back end.
-
A Guide to Sending Scheduled Reports Via Email Using Django And Celeryshows you how to usedjango-celeryin your application. Beachten Sie jedoch, dass es andere Möglichkeiten gibt, Celery in Django zu integrieren, die nicht die django-celery-Abhängigkeit erfordern.
-
Flask asynchrone Hintergrundaufgaben mit Celery und RedisKombiniert Celery mit Redis als Broker undFlask für das Framework der Beispielanwendung.
-
Celery und Django und Docker: Oh My!zeigt, wie man Celery-Tasks für Django innerhalb eines Dockercontainers erstellt. Es bietet auch einige
-
Asynchrone Tasks mit Django und Celery zeigt, wie man Celery mit Django integriert und periodische Tasks erstellt.
-
Getting Started Scheduling Tasks with Celeryist ein detaillierter Walkthrough für die Einrichtung von Celery mit Django (obwohl Celery auch problemlos mit anderen Frameworks verwendet werden kann).
-
Introducing Celery for Python+Djangoprovides an introduction to the Celery task queue with Django as theintended framework for building a web application.
-
Asynchronous Tasks with Falcon and Celeryconfigures Celery with the Falcon framework, which is less commonly-used in web tutorials.
-
Custom Celery task statesist ein fortgeschrittener Beitrag über die Erstellung von benutzerdefinierten Zuständen, was besonders nützlich für vorübergehende Zustände in Ihrer Anwendung ist, die nicht von der Standard-Celery-Konfiguration abgedeckt werden.
-
Asynchrone Tasks mit Django und Celery betrachtet, wie man Celery konfiguriert, um langlaufende Tasks in einer Django-Anwendung zu handhaben.
Celery-Deployment-Ressourcen
Celery und sein Broker laufen getrennt von Ihren Web- und WSGI-Servern, was Ihre Deployments zusätzlich komplex macht. Die folgenden Ressourcen zeigen Ihnen, wie Sie Deployments handhaben und die richtigen Konfigurationseinstellungen vornehmen.
-
Die Serie „Django in Production“ von Rob Golding enthält einen Beitrag, der sich speziell mit Hintergrundaufgaben befasst.
-
How to run celery as a daemon?ist ein kurzer Beitrag mit dem minimalen Code, um den Celery-Daemon und Celerybeat als Systemdienste unter Linux auszuführen.
-
Celery in Productionauf dem Blog der Caktus Group enthält bewährte Praktiken aus ihrer Erfahrung bei der Verwendung von Celery mit RabbitMQ, Überwachungswerkzeugen und anderen Aspekten, die in der vorhandenen Dokumentation nicht oft behandelt werden.
-
Three quick tips from two years with Celerybietet einige solide Ratschläge zu Wiederholungsverzögerungen, dem
-Ofair
-Flag und globalen Task-Timeouts für Celery.