Celery is een taakwachtrij-implementatie voor Python-webtoepassingen die wordt gebruikt om asynchroon werk uit te voeren buiten de HTTP-verzoek-antwoord-cyclus om.
Waarom is Celery nuttig?
Task queues en de Celery-implementatie in het bijzonder zijn een van de lastigste onderdelen van een Python-webapplicatiestack om te begrijpen.
Als je een junior ontwikkelaar bent, kan het onduidelijk zijn waarom het verplaatsen van de HTTP request-response cyclus belangrijk is. In het kort, je wilt dat je WSGI server zo snel mogelijk reageert op binnenkomende requests, omdat elk request een worker process vasthoudt tot het antwoord klaar is. Het verplaatsen van werk van deze werkers door asynchrone banen als taken in een wachtrij te draaien is een eenvoudige manier om de responstijd van de WSGI server te verbeteren.
Wat is het verschil tussen Celeryd en Celerybeat?
Celery kan worden gebruikt om batch banen op de achtergrond te draaien volgens een vast schema. Een belangrijk concept in Celery is het verschil tussen de Celery daemon (celeryd), die taken uitvoert, en Celerybeat, die een planner is. Denk aan Celeryd als een tunnel-visie set van een of meer werkers die alle taken afhandelen die je voor hen zet. Elke werker zal een taak uitvoeren en wanneer de taak is voltooid zal de volgende worden opgepakt. De cyclus zal zich continu herhalen, alleen inactief wachtend wanneer er geen taken meer zijn om voor hen te plaatsen.
Celerybeat aan de andere kant is als een baas die bijhoudt wanneer taken moeten worden uitgevoerd. Uw toepassing kan Celerybeat vertellen om een taak uit te voeren op tijdsintervallen, zoals elke 5 seconden of een keer per week. Celerybeat kan ook worden geïnstrueerd om taken uit te voeren op een specifieke datum of tijd, zoals elke zondag om 17:03 uur. Wanneer het interval of de specifieke tijd is bereikt, zal Celerybeat de taak overdragen aan Celeryd om uit te voeren op de eerstvolgende beschikbare werker.
Celery tutorials en advies
Celery is een krachtige tool die moeilijk kan zijn om je geest te wikkelen op het eerste. Lees meer over het concept van task queue en duik vervolgens in deze specifieke tutorials over Celery.
-
A 4 Minute Intro to Celery is een korte screencast ter introductie van task queue.
-
De volgende blogposts over de architectuur van Celery, Celery in het wild: tips en trucs om async-taken in de echte wereld uit te voeren en omgaan met taken die veel bronnen gebruiken op Celery bieden een goede context voor hoe Celery werkt en hoe u enkele van de lastigere aspecten van het werken met de taakwachtrij moet aanpakken.
-
Hoe gebruik je Celery met RabbitMQ? is een gedetailleerde handleiding voor het gebruik van deze tools op een Ubuntu VPS.
-
Celery – Best Practices legt uit wat je niet moet doen met Celery en toont enkele weinig gebruikte functies om het werken met taakwachtrijen gemakkelijker te maken.
-
Celery Best Practices is een vervolg op de bovenstaande best practices-post van een andere auteur, die voortbouwt op enkele van zijn eigen ervaringen die hij meer dan drie jaar met Celery heeft opgedaan.
-
Common Issues Using Celery (And Other Task Queues)bevat goed advies over fouten die u kunt vermijden in uw taakconfiguraties, zoals het gebruik van databasetransacties en het opnieuw proberen van mislukte taken.
-
Asynchrone verwerking in webtoepassingen, deel één en deel twee, bieden een goed inzicht in het verschil tussen een task queue en waarom u uw database niet als een task queue moet gebruiken.
-
Mijn ervaringen met een langlopend, op Celery gebaseerd microproces geeft een aantal goede tips en adviezen op basis van ervaringen met Celery-workers die er lang over doen om hun taken te voltooien.
-
Checklist to build great Celery async tasks is een site die speciaal is ontworpen om u een lijst met goede praktijken te geven die u kunt volgen wanneer u uw taakwachtrijconfiguratie ontwerpt en implementeert in ontwikkel-, staging- en productieomgevingen.
-
Heroku heeft geschreven hoe Celery kan worden beveiligd wanneer taken anders via niet-versleutelde netwerken worden verzonden.
-
Heroku beschrijft drie strategieën voor het testen van code binnen functies die Celery uitvoert. Het bericht concludeert dat het synchroon aanroepen van Celery-taken om ze te testen de beste strategie is, zonder nadelen. Houd echter in gedachten dat elke testmethode die niet hetzelfde is als hoe de functie zal worden uitgevoerd in een productieomgeving mogelijk kan leiden tot over het hoofd geziene bugs. Er is ook een open source Git-repository met alle broncode van de post.
-
Rollbar-monitoring van Celery in een Django-app legt uit hoe je Rollbar kunt gebruiken om taken te monitoren. Superhandig wanneer werkers steevast zonder aanwijsbare reden sterven.
-
3 haken en ogen voor het werken met Celery zijn dingen om in gedachten te houden als je nieuw bent met de Celery-taakwachtrij-implementatie.
-
Dask en Celery vergelijkt Dask.distributed met Celery voor Python-projecten. Het artikel geeft codevoorbeelden om te laten zien hoe taken met een van beide wachtrijen kunnen worden uitgevoerd.
-
Python+Celery: Chaining jobs?wordt uitgelegd dat Celery-taken van elkaar afhankelijk moeten zijn met behulp vanCelery-ketens, en niet direct afhankelijk moeten zijn tussen taken.
Celery met webframeworks
Celery wordt meestal gebruikt met een webframework zoalsDjango, Flask of Pyramid.Deze bronnen laten zien hoe u de Celery-taakwachtrij kunt integreren met het webframework van uw keuze.
-
Hoe Celery en RabbitMQ te gebruiken met Django is een geweldige tutorial die laat zien hoe u zowel een basictask installeert als opzet met Django.
-
Miguel Grinberg heeft een leuke post geschreven over het gebruik van de taskqueue Celery met Flask. Hij geeft een overzicht van Celery, gevolgd door specifieke code om de taskqueue op te zetten en te integreren met Flask.
-
Een asynchrone taakwachtrij opzetten voor Django met behulp van Celery en Redisis is een eenvoudige tutorial voor het opzetten van de Celery-taakwachtrij voorDjango-webtoepassingen met behulp van de Redis-broker aan de achterkant.
-
Een handleiding voor het verzenden van geplande rapporten via e-mail met behulp van Django en Celerys laat zien hoe je Jango-Celery in je toepassing kunt gebruiken. Er zijn echter andere manieren om Celery met Django te integreren zonder de afhankelijkheid van django-celery.
-
Flask asynchrone achtergrondtaken met Celery en Redis combineert Celery met Redis als de broker enFlask voor het framework van de voorbeeldtoepassing.
-
Celery en Django en Docker: Oh My! laat zien hoe je Celery-taken voor Django binnen een Dockercontainer kunt maken. Het biedt ook enkele
-
Asynchrone taken met Django en Celeryshows hoe Celery te integreren met Django en Periodieke Taken te maken.
-
Getting Started Scheduling Tasks with Celeryis een gedetailleerde walkthrough voor het opzetten van Celery met Django (hoewel Celery ook zonder problemen met andere frameworks kan worden gebruikt).
-
Introducing Celery for Python+Djangopgeeft een inleiding tot de Celery-taakwachtrij met Django als het beoogde framework voor het bouwen van een webtoepassing.
-
Asynchrone taken met Falcon en Celeryconfigureert Celery met het Falcon-framework, dat minder vaak wordt gebruikt in webtutorials.
-
Aangepaste Celery-taakstatussen is een geavanceerde post over het maken van aangepaste statussen, die met name nuttig is voor tijdelijke statussen in uw toepassing die niet worden gedekt door de standaardconfiguratie van Celery.
-
Asynchrone taken met Django en Celerylleert hoe u Celery kunt configureren om langlopende taken in een Django-app af te handelen.
Celery deployment resources
Celery en zijn makelaar draaien apart van uw web- en WSGI-servers, dus het voegt wat extra complexiteit toe aan uw implementaties. De volgende bronnen laten u zien hoe u met implementaties om moet gaan en hoe u de juiste configuratie-instellingen kunt maken.
-
De serie “Django in Production” van Rob Golding bevat een specifieke post over achtergrondtaken.
-
Hoe draai ik Celery als een daemon? is een korte post met de minimale code voor het draaien van de Celery daemon en Celerybeat als systeemdiensten op Linux.
-
Celery in Production op de blog van de Caktus Group bevat goede praktijken uit hun ervaring met het gebruik van Celery met RabbitMQ, monitoringtools en andere aspecten die niet vaak worden besproken in bestaande documentatie.
-
Drie snelle tips uit twee jaar Celery biedt gedegen advies over retry-vertragingen, de vlag
-Ofair
en globaltask-time-outs voor Celery.