I min 6 års kodingserfaring er Django uten tvil Det beste rammeverket jeg noensinne har jobbet med. Til tider vil vi bygge en enkel Django program for å kjøre async oppgaver i bakgrunnen ved Hjelp Av Selleri og RabbitMQ.
Python 3.6.8, RabbitMQ 3.6.10
Django==2.2.3, flower= = 0.9.3, selleri= = 4.3.0
installer RabbitMQ:
apt-get install rabbitmq-server
RabbitMQ-tjenesten starter automatisk ved installasjon. Du kan starte serveren manuelt ved å kjøre følgende kommando på kommandolinjen.
rabbitmq-server
Etter RabbitMQ installasjon, må du installere python og relatert pakke med pip kommando som:
pip install Django
pip install celery
deretter må du opprette En Django prosjekt med en enkel app, skaper vi djangocelery prosjekt med app l, kan du klone djangocelery prosjektet på Min GitHub.
Djangocelery project
djangocelery/|-- app/| |-- migrations/| |-- __init__.py| |-- admin.py| |-- apps.py| |-- models.py| |-- tests.py| +-- views.py|-- djangocelery/| |-- __init__.py| |-- settings.py| |-- urls.py| +-- wsgi.py|-- manage.py+-- requirements.txt
DET første trinnet du må legge TIL CELERY_BROKER_URL-konfigurasjonen til settings.py fil:
innstillinger.py
CELERY_BROKER_URL = ‘amqp://localhost’
Legg Selleri Til Django-Prosjektet
Lag en fil med navnet celery.py i tilknytning til din settings.py ‘file,
|-- djangocelery/| |-- __init__.py| |-- celery.py| |-- settings.py| |-- urls.py| +-- wsgi.py
denne filen vil inneholde selleri-konfigurasjonen for prosjektet Vårt, Legg til følgende kode i `celery.py ‘ file :
koden ovenfor oppretter en forekomst av prosjektet vårt.
Selleri vil se etter definisjoner av asynkrone oppgaver i en fil som heter `tasks.py ‘ fil i hver av programkatalogene.
Rediger __init__.py
rediger nå __init__.py fil i prosjektroten med denne banen :
|-- djangocelery/| |-- __init__.py
åpne den og kopier under kode inn i filen og lagre det.
Dette vil sørge For At Vår Selleri app er viktig hver gang Django starter.
Opprette Første Selleri Oppgave
Vi kan lage en fil som heter oppgaver.Py inne I En Django app og sette alle Våre Selleri oppgaver i denne filen, Vil Selleri app vi opprettet i prosjektet root samle alle oppgaver definert på tvers Av Alle Django apps oppført I INSTALLED_APPSconfiguration.
app/tasks.py
app/views.py
i Stedet for å ringe celery_task direkte, ringer jeg celery_task.Delay(), på denne måten instruerer Vi Selleri å utføre denne funksjonen i bakgrunnen, Og Django fortsetter å behandle visningen min celery_view og returnerer jevnt til brukeren djangocelery/urls.py
men før du prøver det, sjekk neste avsnitt for å lære hvordan Du starter Selleriarbeiderprosessen.
Starte Arbeidsprosessen
Åpne en ny terminal-fane på prosjektbanen, og kjør følgende kommando:
celery -A djangocelery worker -l info
resultatet er noe slikt:
kjør deretter django-prosjektet åpne http://127.0.0.1:8000/celerytask/ så etter noen sekunder, hvis vi sjekker selleriarbeiderprosessen igjen, kan vi se det fullført utførelsen, første lasteside ferdig og send oppgaver til selleri da selleri mottok oppgaver:
After 30seconds tasks functions done and return successful strings :
overvåking selleri arbeidere
det er en hendig web-basert verktøy kalt flower som kan brukes for å overvåke og administrere selleri klynger, flower gir detaljert statistikk over oppgaven fremgang og historie, det viser også andre oppgave detaljer som argumentene gått, starttid, runtime, og andre.
installer Flower
pip install flower
når du er installert, må du åpne en ny kommandolinje i prosjektkatalogen og kjøre denne kommandoen :
celery -A djangocelery worker -l info
åpne deretter en ny kommandolinje i prosjektbanen og kjør denne kommandoen :
celery -A djangocelery flower
detaljene kan da vises ved å besøke http://localhost:5555/dashboard i nettleseren din som :
I tillegg:
du kan slette alle ventende oppgaver med:
celery -A proj purge
Det er det. Gjøre.