Definicja #
Celery to framework open-source do asynchronicznego przetwarzania zadań w Pythonie, oparty na wzorcu kolejki komunikatów (message queue). Architektura systemu składa się z trzech elementów: producenta (aplikacja dodająca zadania), brokera (Redis lub RabbitMQ przechowujący kolejkę) oraz workera (proces Celery wykonujący zadania).
Celery obsługuje task scheduling (Celery Beat — cron-like scheduler), retry logic z eksponencjalnym backoff, priorytety zadań, grupowanie (chain, group, chord) oraz monitoring przez Flower (dashboard webowy). Wspiera wielowątkowość i wieloprocesowość.
Integracja z Django odbywa się przez pakiet django-celery-results (przechowywanie wyników w bazie) i django-celery-beat (dynamiczny scheduler). W ekosystemie Python, Celery jest de facto standardem — alternatywy to RQ (Redis Queue) i Dramatiq.
Zastosowania #
- Wysyłanie emaili i powiadomień w tle (bez blokowania odpowiedzi HTTP)
- Przetwarzanie plików — konwersja obrazów, generowanie PDF, parsowanie CSV
- Cykliczne zadania — raporty, synchronizacje danych, czyszczenie bazy (Celery Beat)
- Integracje z zewnętrznymi API — webhoki, płatności, eksport danych
- Przetwarzanie ML — trening modeli, batch inference w tle
Ścieżka nauki #
Naukę Celery zacznij od podstaw — zainstaluj Redis jako broker i utwórz pierwsze zadanie w prostej aplikacji Python. Oficjalna dokumentacja (docs.celeryq.dev) jest wyczerpująca i zawiera przykłady dla Django i Flask.
Kluczowe zagadnienia do opanowania: definiowanie tasków (dekorator @app.task), uruchamianie asynchroniczne (.delay(), .apply_async()), obsługa błędów i retry, Celery Beat do zadań cyklicznych oraz monitorowanie przez Flower. Warto też poznać skalowanie workerów i konfigurację concurrency (prefork vs. gevent). Praktyczne projekty: system wysyłania emaili, periodic task do synchronizacji danych z API.
FAQ #
- Jaki broker wybrać — Redis czy RabbitMQ?
- Redis jest prostszy w konfiguracji i wystarczający dla większości zastosowań — jest też używany jako backend wyników. RabbitMQ oferuje bardziej zaawansowane funkcje routingu wiadomości (exchanges, bindings) i jest lepszy przy złożonych topologiach. W Django projektach Redis jest najczęstszym wyborem.
- Jak monitorować Celery?
- Najpopularniejszym narzędziem jest Flower — webowy dashboard pokazujący status workerów, historię tasków i statystyki. Dostępny przez pip install flower. Alternatywnie można użyć django-celery-results do przechowywania wyników w bazie danych Django.
- Czy Celery działa z FastAPI?
- Tak — Celery można integrować z FastAPI podobnie jak z Flask. Zadania są definiowane osobno od aplikacji FastAPI i uruchamiane przez .delay() lub .apply_async(). Warto rozważyć też nowsze alternatywy jak ARQ (async Redis Queue) projektowane z myślą o async Python.
- Co to jest Celery Beat?
- Celery Beat to scheduler uruchamiający zadania cyklicznie — działa jak cron, ale zintegrowany z Celery. Pozwala definiować zadania wykonywane co określony czas (np. co godzinę, raz dziennie) bezpośrednio w konfiguracji Pythona lub przez django-celery-beat w bazie danych.