Czym jest Celery?
Czym jest Celery?
Biblioteka Celery jest przystosowana do obsługi kolejek asynchronicznych. Oznacza to, że możemy kolejkować zadania (tzw. taski), które będą wykonywać się od siebie niezależnie. "Taski" można dzielić na te ważniejsze i te mniej ważne, czyli nadawać im priorytety. Celery zapewnia również możliwość wielokrotnego powtórzenia "tasku", który zgłosił wyjątek.
Kolejkowanie jest bardzo przydatne w takich przypadkach jak zbieranie danych, lub gdy użytkownik nie wymaga natychmiastowego rezultatu swojego działania. Na przykład, wyobraźmy sobie, że zbieramy ogłoszenia nieruchomości z dowolnej strony. Nie jest ważna kolejność pobierania ogłoszeń, a jedynie fakt, aby było ich możliwie dużo. Ponad to, musimy użyć kilku serwerów proxy, które jak wiemy niestety bywają awaryjne. W takim przypadku doskonałym rozwiązaniem jest właśnie kolejkowanie. Każde ogłoszenie będzie wprowadzone do kolejki pobrań. Kolejno biblioteka będzie realizować zadania w różnym tempie i powtarzać pobieranie danego ogłoszenia w przypadku błędów połączenia lub innych problemów. Oczywiście ilość wykonywanych pobrań w jednym czasie jest sztywno określana w zależności od zasobów serwera. A działanie kolejki możemy śledzić na żywo. Bardzo wygodne, prawda?
Są jednak sytuacje, gdzie nie zawsze warto stosować Celery, ponieważ nie jest to "lek na wszystko". Na przykład warto zrezygnować z Celery dla najprostszych zadań CRON. Jeżeli chcemy usunąć logi z serwera raz na dobę - nie warto wyciągać tak ciężkiego działa jak Celery, ponieważ nie jest ono potrzebne, a pochłania zasoby serwera. Warto wspomnieć, że Celery wymaga również szybkiej bazy danych (zwykle stosuje się bazę Redis). Nie będziemy stosować również Celery, gdy użytkownik potrzebuje odpowiedzi "natychmiast".
Biblioteka jest napisana w Python i świetnie nadaje się do zastosowania z frameworkami takimi jak Django. Aktualnie Django posiada własny dodatek z Celery o nazwie django-celery-beat.
Instalacja django-celery-beat wygląda następująco: $ pip install -U django-celery-beat
Następnie należy dodać django_celery_beat do pliku Settings.py tak jak poniżej:INSTALLED_APPS = [
'django_celery_beat',
...
]
Należy utworzyć migracje: python manage.py migrate django_celery_results
Od tej pory w panelu administratora Django pojawią się encje:
Do konfiguracji Settings.py należy dodać jeszcze dane do bazy Redis, na przykład (port może być inny!):
CELERY_BROKER_URL = 'redis://127.0.0.1:8890'