Holen Sie sich Ihr kostenloses Buch über Django und Celery
Von Idego Group

Manchmal stehen Entwickler vor der Herausforderung, Code periodisch auszuführen, beispielsweise stündliche oder tägliche Aufgaben. Celery bietet Mechanismen zur Vereinfachung der Erstellung verteilter Systeme durch die Verteilung von Arbeitseinheiten über Nachrichtenaustausch zwischen vernetzten Maschinen oder lokalen Workern. Eine Aufgabe repräsentiert jeden Job, der Verteilung erfordert und zuvor eingekapselt werden muss.
Celery unterstützt synchrone, asynchrone, periodische und geplante Aufgaben transparent über Worker im Internet. Wenn eine Aufgabe aufgerufen wird, gibt sie eine AsyncResult-Instanz zurück, die Statusprüfungen und das Abrufen von Ergebnissen ermöglicht. Die Client-Komponente erstellt und sendet Aufgaben über Methoden wie apply_async() an Broker.
Eine Result-Backend-Komponente speichert Aufgabenstatus und -ergebnisse zur Abholung durch den Client. Celery unterstützt mehrere Backends, darunter RabbitMQ, Redis, MongoDB, Memcached und SQLAlchemy/Django ORM.
Worker führen empfangene Aufgaben mit konfigurierbarem Verhalten durch Parallelitätsmodi, Fernsteuerung und Aufgabenwiderrufsmechanismen aus. Broker verwalten die Nachrichtenübertragung zwischen Clients und Workern, wobei RabbitMQ und Redis die umfassendste Funktionalität bieten.
Die Projektstruktur umfasst eine celery.py-Datei im Projektverzeichnis und tasks.py im Anwendungsverzeichnis. Die Celery-Anwendungsinstanz wird in celery.py erstellt, wobei Django-Einstellungen konfiguriert und Aufgaben aus installierten Anwendungen automatisch erkannt werden.
Grundlegende Aufgaben können mit dem @shared_task-Dekorator definiert werden. Periodische Aufgaben werden in regelmäßigen Abständen mithilfe von Cron-ähnlicher Planung ausgeführt. Diese Aufgaben erfordern den Celery Beat-Scheduler, der neben den Workern läuft.
In Produktionsumgebungen sollten Celery Worker und Scheduler als Hintergrund-Daemons ausgeführt werden. Supervisor kann diese Prozesse für einen zuverlässigen Betrieb verwalten.