Celery er en task queueimplementation til Python-webapplikationer, der bruges til asynkront at udføre arbejde uden for HTTP-forespørgsels- og svarcyklussen.
Hvorfor er Celery nyttigt?
Task queues og Celery-implementeringen i særdeleshed er en af de vanskeligere dele af en Python-webapplikations stak at forstå.
Hvis du er en juniorudvikler kan det være uklart, hvorfor det er vigtigt at bevæge sig ud over HTTP request-response-cyklussen. Kort sagt ønsker du, at din WSGI-server skal svare på indgående anmodninger så hurtigt som muligt, fordi hver anmodning binder en arbejdsproces, indtil svaret er færdigt. At flytte arbejdet væk fra disse arbejdere ved at oprette asynkrone job som opgaver i en kø er en enkel måde at forbedre WSGI-serverens svartider.
Hvad er forskellen mellem Celeryd og Celerybeat?
Celery kan bruges til at køre batchjobs i baggrunden efter en regelmæssig tidsplan. Et nøglebegreb i Celery er forskellen mellem Celery-dæmonen (celeryd), som udfører opgaver, og Celerybeat, som er eneduler. Tænk på Celeryd som et tunnelsynet sæt af en eller flere arbejdere, der håndterer de opgaver, du lægger foran dem. Hver worker vil udføre en opgave, og når opgaven er afsluttet, vil den tage den næste op.Cyklussen vil gentage sig uafbrudt og kun vente passivt, når der ikke er flere opgaver at sætte foran dem.
Celerybeat på den anden side er som en chef, der holder styr på, hvornår opgaverne skal udføres. Din applikation kan fortælle Celerybeat, at den skal udføre en opgave med tidsintervaller, f.eks. hvert 5. sekund eller en gang om ugen. Celerybeat kan også instrueres til at udføre opgaver på en bestemt dato eller et bestemt tidspunkt, f.eks. kl. 17:03 hver søndag. Når intervallet eller det specifikke tidspunkt er nået, vil Celerybeat overdrage opgaven til Celeryd til at blive udført på den næste tilgængelige medarbejder.
Celery tutorials og råd
Celery er et kraftfuldt værktøj, som det kan være svært at forstå i starten. Sørg for at læse op på task queue-konceptetog dyk derefter ned i disse specifikke Celery-tutorials.
-
A 4 Minute Intro to Celery er et kort indledende screencast om task queue.
-
Denne blogindlægsserie om Celerys arkitektur, Celery in the wild: tips og tricks til at køre asynkrone opgaver i den virkelige verden og håndtering af ressourceforbrugende opgaver på Celery giver en god kontekst for, hvordan Celery fungerer, og hvordan man håndterer nogle af de vanskeligere dele af arbejdet med task queue.
-
Sådan bruger du Celery med RabbitMQer en detaljeret gennemgang af brugen af disse værktøjer på en Ubuntu VPS.
-
Celery – Best Practicesforklarer ting, du ikke bør gøre med Celery, og viser nogle underudnyttede funktioner, der gør det lettere at arbejde med task-køer.
-
Celery Best Practiceser en anden forfatters opfølgning på ovenstående indlæg om bedste praksis, der bygger på nogle af hans egne erfaringer fra 3+ år med Celery.
-
Common Issues Using Celery (And Other Task Queues)indeholder gode råd om fejl, der skal undgås i dine opgavekonfigurationer, f.eks. brug af databasetransaktioner og gentagelse af mislykkede opgaver.
-
Asynkron behandling i webapplikationer, del et og del to, er god læsning for at forstå forskellen mellem en task queue og hvorfor du ikke bør bruge din database som en sådan.
-
Mine erfaringer med en langvarig Celery-baseret mikroprocesgiver nogle gode tips og råd baseret på erfaringer med Celery-medarbejdere, der tager lang tid om at udføre deres opgaver.
-
Checklist to build great Celery async taskser et websted, der er specielt designet til at give dig en liste over god praksis, som du skal følge, når du designer din task queue-konfiguration og implementerer den i udviklings-, staging- og produktionsmiljøer.
-
Heroku skriver om, hvordan man kan sikre Celery, når opgaver ellers sendes over ukrypterede netværk.
-
Enhedstest af Celery-opgaverforklarer tre strategier til test af kode inden for funktioner, som Celeryexecutterer. Indlægget konkluderer, at det at kalde Celery-opgaver synkront for at teste dem er den bedste strategi uden nogen ulemper. Husk dog på, at enhver testmetode, der ikke er den samme som den måde, hvorpå funktionen vil blive udført i et produktionsmiljø, potentielt kan føre til overset fejl. Der er også et Git-repositorium med åben kildekode med al kildekoden fra indlægget.
-
Rollbar-overvågning af Celery i en Django-appforklarer, hvordan du bruger Rollbar til at overvåge opgaver. Supernyttigt, når arbejdere uvægerligt dør uden nogen åbenlys grund.
-
3 Gotchas for Working with Celeryer ting at huske på, når du er ny i Celery task queueimplementeringen.
-
Dask og Celery sammenligner Dask.distributed med Celery for Python-projekter. Indlægget giver kodeeksempler for at vise, hvordan man udfører opgaver med begge opgavekøer.
-
Python+Celery: Chaining jobs?forklarer, at Celery-opgaver skal være afhængige af hinanden ved hjælp afCelery-kæder, ikke direkte afhængigheder mellem opgaver.
Celery med webframeworks
Celery bruges typisk med et webframework somDjango, Flask eller Pyramid.Disse ressourcer viser dig, hvordan du integrerer Celery-opgavekøen med den webramme, du vælger.
-
Sådan bruger du Celery og RabbitMQ med Django er en god vejledning, der viser, hvordan du både installerer og opsætter en basistask med Django.
-
Miguel Grinberg har skrevet et fint indlæg om brug af thetaskqueue Celery med Flask. han giver et overblik over Celery efterfulgt af specifik kode til at opsætte taskqueue og integrere den med Flask.
-
Opsætning af en asynkron task-kø til Django ved hjælp af Celery og Redisis en ligetil vejledning til opsætning af Celery task-køen tilDjango-webapplikationer ved hjælp af Redis-brokeren i backend.
-
En vejledning til at sende planlagte rapporter via e-mail ved hjælp af Django og Celeryviser dig, hvordan du kan brugejango-celery i din applikation. Bemærk dog, at der er andre måder at integrereCelery med Django på, som ikke kræver django-celery-afhængigheden.
-
Flask asynkrone baggrundsopgaver med Celery og Rediscombinerer Celery med Redis som mægler ogFlask som ramme for eksempelapplikationen.
-
Celery og Django og Docker: Oh My!viser, hvordan man opretter Celery-opgaver for Django i en Dockercontainer. Den giver også nogle
-
Asynkronous Tasks With Django and Celerys viser, hvordan man integrerer Celery med Django og opretter Periodic Tasks.
-
Geting Started Scheduling Tasks with Celeryer en detaljeret gennemgang af opsætningen af Celery med Django (selvomCelery også kan bruges uden problemer med andre frameworks).
-
Introducing Celery for Python+Django giver en introduktion til Celery-opgavekøen med Django som den tilsigtede ramme for opbygning af en webapplikation.
-
Asynkronous Tasks with Falcon and Celerykonfigurerer Celery med Falcon-rammen, som er mindre almindeligt anvendt i webvejledningsvideoer.
-
Brugerdefinerede Celery-opgavetilstande er et avanceret indlæg om oprettelse af brugerdefinerede tilstande, hvilket især er nyttigt til forbigående tilstande i din applikation, som ikke er dækket af standardkonfigurationen af Celery.
-
Asynkronous Tasks with Django and Celery ser på, hvordan du konfigurerer Celery til at håndtere langvarige opgaver i en Django-app.
Celery deployment resources
Celery og dens broker kører separat fra dine web- og WSGI-servere, så dettilfører en vis ekstra kompleksitet til dine deployeringer. Følgende ressourcer viser dig, hvordan du håndterer implementeringer og får de rigtige konfigurationsindstillinger på plads.
-
Serien “Django in Production” afRob Golding indeholder et indlæg specifikt om Background Tasks.
-
Hvordan kører man celery som en dæmon?er et kort indlæg med den minimale kode til at køre Celery-dæmonen og Celerybeat som systemtjenester på Linux.
-
Celery in Productionpå Caktus Group-bloggen indeholder god praksis fra deres erfaring med at bruge Celery med RabbitMQ, overvågningsværktøjer og andre aspekter, der ikke ofte er omtalt i eksisterende dokumentation.
-
Three quick tips from two years with Celerygiver nogle solide råd om retry-delays,
-Ofair
-flaget og globaltask-timeouts for Celery.