Celery este o implementare a cozii de sarcini pentru aplicațiile web Python folosite pentru a executa în mod asincron lucrări în afara ciclului cerere-răspuns HTTP.
De ce este util Celery?
Cozile de așteptare a sarcinilor și implementarea Celery în particularsunt una dintre cele mai dificile de înțeles părți ale unei stive de aplicații web Python.
Dacă sunteți un dezvoltator începător, poate fi neclar de ce este important să vă deplasați în afara ciclului cerere-răspuns HTTP. Pe scurt, doriți ca serverul dvs. WSGI să răspundă la solicitările primite cât mai repede posibil, deoarece fiecare solicitare leagă un proces de lucru până când se termină răspunsul. Mutarea muncii de pe acești lucrători prin rotirea lucrărilor asincrone ca sarcini într-o coadă de așteptare este o modalitate simplă de a îmbunătăți timpii de răspuns ai serverului WSGI.
Care este diferența dintre Celeryd și Celerybeat?
Celery poate fi folosit pentru a rula lucrări pe loturi în fundal pe un program regulat. Un concept cheie în Celery este diferența dintre daemonulCelery (celeryd), care execută sarcini, Celerybeat, care este un programator. Gândiți-vă la Celeryd ca la un set de tuneluri de unul sau mai mulți lucrători care se ocupă de orice sarcini pe care le puneți în fața lor. Fiecare lucrător va executa o sarcină și atunci când sarcina este finalizată o va prelua pe următoarea.Ciclul se va repeta continuu, așteptând în zadar doar atunci când nu mai sunt sarcini de pus în fața lor.
Celerybeat, pe de altă parte, este ca un șef care ține evidența momentului în care sarcinile trebuie executate. Aplicația dumneavoastră îi poate spune lui Celerybeat să execute o sarcină la intervale de timp, cum ar fi la fiecare 5 secunde sau o dată pe săptămână. De asemenea, Celerybeat poate fi instruit să execute sarcini la o anumită dată sau oră, cum ar fi 5:03pme în fiecare duminică. Când intervalul sau ora specifică este atins, Celerybeat va preda sarcina lui Celeryd pentru a o executa pe următorul lucrător disponibil.
Tutoriale și sfaturi despre Celery
Celery este un instrument puternic care poate fi dificil de înțeles la început. Asigurați-vă că citiți despre conceptul de coadă de sarcini, apoi scufundați-vă în aceste tutoriale specifice Celery.
-
A 4 Minute Intro to Celery esteun scurt screencast introductiv al cozii de sarcini.
-
Această serie de postări pe blog despre arhitectura lui Celery,Celery în sălbăticie: sfaturi și trucuri pentru a rula sarcini asincronice în lumea realăși cum să te descurci cu sarcinile consumatoare de resurse pe Celeryoferă un context excelent pentru modul în care funcționează Celery și cum să te descurci cu unele dintre cele mai dificile aspecte ale lucrului cu coada de sarcini.
-
Cum se utilizează Celery cu RabbitMQeste o prezentare detaliată pentru utilizarea acestor instrumente pe un VPS Ubuntu.
-
Celery – Cele mai bune practiciexplică lucrurile pe care nu ar trebui să le faceți cu Celery și prezintă unele caracteristici subutilizate pentru a face cozile de sarcini mai ușor de lucrat.
-
Celery – Cele mai bune practicieste o continuare a autorului la postarea de mai sus despre cele mai bune practici, care se bazează pe unele dintre învățămintele sale proprii din cei peste 3 ani de utilizare a lui Celery.
-
Common Issues Using Celery (And Other Task Queues)conține sfaturi bune despre greșelile pe care trebuie să le evitați în configurațiile de sarcini,cum ar fi utilizarea tranzacțiilor din baza de date și reluarea sarcinilor eșuate.
-
Asynchronous Processing in Web Applications Part Oneand Part Twosunt lecturi foarte bune pentru a înțelege diferența dintre o coadă de sarcini și de ce nu ar trebui să folosiți baza de date ca una.
-
My Experiences With A Long-Running Celery-Based Microprocess conține câteva sfaturi bune și sfaturi bazate pe experiența cu lucrători Celery care au nevoie de mult timp pentru a-și finaliza sarcinile.
-
Checklist to build great Celery async taskseste un site special conceput pentru a vă oferi o listă de bune practici pe care să le urmați în timp ce vă proiectați configurația cozii de sarcini și o implementați în mediile de dezvoltare, pregătire și producție.
-
Heroku a scris despre cum să securizeze Celery atunci când sarcinile sunt altfel trimise prin rețele necriptate.
-
Testarea unitară a sarcinilor Celeryexplică trei strategii pentru testarea codului în cadrul funcțiilor pe care Celery le execută. Postul concluzionează că apelarea sincronă a sarcinilor Celery pentru a le testa este cea mai bună strategie, fără niciun dezavantaj. Cu toate acestea, țineți cont de faptul că orice metodă de testare care nu este identică cu modul în care funcția se va executa într-un mediu de producție poate duce, potențial, la erori trecute cu vederea. Există, de asemenea, un depozit Git cu sursă deschisă cu tot codul sursădin post.
-
Monitorizarea Rollbar a Celery într-un apel Djangoexplică cum se utilizează Rollbar pentru a monitoriza sarcinile. Super util atunci când lucrătorii mor invariabil fără un motiv aparent.
-
3 Gotchas for Working with Celerysunt lucruri de care trebuie să țineți cont atunci când sunteți nou în implementarea cozii de sarcini Celery.
-
Dask și Celerycompara Dask.distribuit cu Celery pentru proiecte Python. Postul oferăexemple de cod pentru a arăta cum se execută sarcini cu oricare dintre cele două cozi de sarcini.
-
Python+Celery: Chaining jobs?explică faptul că sarcinile Celery ar trebui să depindă unele de altele folosind lanțuriCelery, nu dependențe directe între sarcini.
Celery cu cadre web
Celery este utilizat de obicei cu un cadru web precumDjango, Flask sau Pyramid.Aceste resurse vă arată cum să integrați coada de sarcini Celery cu cadrul web ales de dumneavoastră.
-
Cum să folosiți Celery și RabbitMQ cu Djangoeste un tutorial excelent care arată cum să instalați și să configurați o sarcină de bază cu Django.
-
Miguel Grinberg a scris o postare frumoasă despre utilizarea cozii de sarcini Celery cu Flask.El oferă o prezentare generală a Celery, urmată de un cod specific pentru a configura coada de sarcini și a o integra cu Flask.
-
Setting up an asynchronous task queue for Django using Celery and Redisis un tutorial simplu pentru configurarea cozii de sarcini Celery pentru aplicațiile webDjango folosind brokerul Redis pe partea din spate.
-
A Guide to Sending Scheduled Reports Via Email Using Django And Celerysă vă arată cum să folosiți Celery-jango-celery în aplicația dvs. Rețineți însă că există și alte modalități de a integraCelery cu Django care nu necesită dependența django-celery.
-
Flask asynchronous background tasks with Celery and Rediscombinează Celery cu Redis ca broker șiFlask pentru cadrul aplicației de exemplu.
-
Celery and Django and Docker: Oh My!arată cum se creează sarcini Celery pentru Django în cadrul unui Dockercontainer. De asemenea, oferă câteva
-
Asynchronous Tasks With Django and Celeryspune cum să integrați Celery cu Django și să creați Periodic Tasks.
-
Getting Started Scheduling Tasks with Celeryeste o prezentare detaliată pentru configurarea lui Celery cu Django (deșiCelery poate fi folosit fără probleme și cu alte framework-uri).
-
Introducing Celery for Python+Djangooferă o introducere în coada de sarcini Celery cu Django ca și cadru intenționat pentru construirea unei aplicații web.
-
Asynchronous Tasks with Falcon and Celeryconfigurează Celery cu cadrul Falcon, care este mai puțin utilizat în mod obișnuit în tutorialele web.
-
Custom Celery task stateseste o postare avansată despre crearea de stări personalizate, care este deosebit de utilăpentru stările tranzitorii din aplicația dvs. care nu sunt acoperite de configurațiadefault Celery.
-
Asynchronous Tasks with Django and Celeryeste analizează cum să configurați Celery pentru a gestiona sarcinile de lungă durată într-o aplicație Django.
Resursele de implementare a lui Celery
Celery și brokerul său rulează separat de serverele dvs. web și WSGI, astfel încât adaugă o anumită complexitate suplimentară la implementările dvs. Următoarele resurse vă ghidează prin modul în care să vă ocupați de implementări și să obțineți setările corecte de configurare.
-
Seria „Django in Production” de cătreRob Golding conține o postare specifică sarcinilor de fundal.
-
Cum să rulați Celery ca un demon?este o postare scurtă cu codul minim pentru a rula demonul Celery șiCelerybeat ca servicii de sistem pe Linux.
-
Celery in Productionpe blogul Caktus Group conține bune practici din experiența lor în utilizarea Celery cu RabbitMQ, instrumente de monitorizare și alte aspecte care nu sunt adesea discutate în documentația existentă.
-
Trei sfaturi rapide de doi ani cu Celeryoferă câteva sfaturi solide privind întârzierile de reîncercare, steagul
-Ofair
și timeout-urile globaltask pentru Celery.