Pobierz darmową książkę o Django i Celery
Autor: Idego Group

Programiści czasami muszą uruchamiać kod cyklicznie, na przykład co godzinę lub codziennie. Celery oferuje mechanizmy upraszczające tworzenie systemów rozproszonych dzięki rozdzielaniu jednostek pracy za pomocą komunikatów między połączonymi sieciowo maszynami lub lokalnymi workerami. Zadanie to wcześniej zdefiniowana jednostka pracy, którą można rozdzielić między workery.
Celery obsługuje synchroniczne, asynchroniczne, cykliczne i zaplanowane zadania w sposób przezroczysty między workerami w Internecie. Gdy zadanie jest wywoływane, zwraca instancję AsyncResult, umożliwiając sprawdzenie statusu i pobranie wyników. Komponent klienta tworzy i wysyła zadania do brokerów za pomocą metod takich jak apply_async().
Backend wyników przechowuje status i wyniki zadań do pobrania przez klienta. Celery obsługuje wiele backendów, w tym RabbitMQ, Redis, MongoDB, Memcached i SQLAlchemy/Django ORM.
Sposób wykonywania zadań przez workery można konfigurować za pomocą trybów współbieżności, zdalnego sterowania i mechanizmów unieważniania zadań. Brokerzy obsługują transmisję komunikatów między klientami a workerami, przy czym RabbitMQ i Redis oferują najbardziej kompletną funkcjonalność.
Struktura projektu obejmuje plik celery.py w katalogu projektu i tasks.py w katalogu aplikacji. W celery.py tworzy się instancję aplikacji Celery, konfiguruje ustawienia Django i włącza automatyczne wykrywanie zadań z zainstalowanych aplikacji.
Podstawowe zadania można definiować za pomocą dekoratora @shared_task. Zadania cykliczne wykonują się w regularnych odstępach czasu przy użyciu harmonogramowania podobnego do crona. Te zadania wymagają uruchomionego harmonogramu Celery beat obok workerów.
W środowiskach produkcyjnych worker i harmonogram Celery powinny działać jako demony w tle. Supervisor może zarządzać tymi procesami, aby zapewnić ich niezawodne działanie.