Skip to main content
idego
Python

Ta din gratis bok om Django och Celery

Av Idego Group

Ta din gratis bok om Django och Celery

Ibland möter utvecklare utmaningar med att köra kod periodiskt, till exempel timvisa eller dagliga uppgifter. Celery erbjuder mekanismer för att förenkla skapandet av distribuerade system genom att distribuera arbetsenheter via meddelandeutbyten mellan nätverkskopplade maskiner eller lokala workers. En uppgift representerar vilket jobb som helst som kräver distribution och som måste kapslas in i förväg.

Celery stöder synkrona, asynkrona, periodiska och schemalagda uppgifter transparent mellan workers på Internet. När en uppgift anropas returneras en AsyncResult-instans som möjliggör statuskontroller och hämtning av resultat. Klientkomponenten skapar och skickar uppgifter till mäklare med hjälp av metoder som apply_async().

En result backend-komponent lagrar uppgiftsstatus och resultat för klienthämtning. Celery stöder flera backends inklusive RabbitMQ, Redis, MongoDB, Memcached och SQLAlchemy/Django ORM.

Workers kör mottagna uppgifter med konfigurerbart beteende via concurrency-lägen, fjärrstyrning och mekanismer för uppgiftsåterkallelse. Mäklare hanterar meddelandeöverföring mellan klienter och workers, där RabbitMQ och Redis erbjuder den mest kompletta funktionaliteten.

Projektstrukturen inkluderar en celery.py-fil i projektkatalogen och tasks.py i applikationskatalogen. Celery-applikationsinstansen skapas i celery.py och konfigurerar Django-inställningar och identifierar automatiskt uppgifter från installerade applikationer.

Grundläggande uppgifter kan definieras med @shared_task-dekoratören. Periodiska uppgifter körs med regelbundna intervall med hjälp av cron-liknande schemaläggning. Dessa uppgifter kräver att Celery beat-schemaläggaren körs tillsammans med workers.

I produktionsmiljöer bör Celery-worker och -schemaläggare köras som bakgrundsdaemoner. Supervisor kan hantera dessa processer för tillförlitlig drift.

Relaterade artiklar