Zdobądź swoją darmową książkę o Django i Celery
Autor: Idego Group

Programiści czasami stają przed wyzwaniem uruchamiania kodu cyklicznie, na przykład co godzinę lub codziennie. Celery oferuje mechanizmy upraszczające tworzenie systemów rozproszonych poprzez dystrybucję jednostek pracy przez wymianę komunikatów między połączonymi sieciowo maszynami lub lokalnymi workerami. Zadanie reprezentuje każdą pracę wymagającą dystrybucji, która musi zostać wcześniej zdefiniowana.
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().
Komponent 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.
Workery wykonują otrzymane zadania z konfigurowalnym zachowaniem poprzez tryby współbieżności, zdalne sterowanie i mechanizmy 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. Instancja aplikacji Celery jest tworzona w celery.py, konfigurując ustawienia Django i automatycznie wykrywając zadania 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 harmonogramera 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 dla niezawodnego działania.