Denne guiden vil implementere oppgavekøer i Redis ved hjelp av Python Redis -købiblioteket.
Hva er Redis -kø?
Python Redis -kø eller RQ er et enkelt, men kraftig Python -bibliotek som jobber med Redis for å utføre oppgavesøk og utførelse i bakgrunnen ved hjelp av arbeidere. RQ er grei å bruke for nybegynnere, men fortsatt veldig kraftig for store prosjekter.
Funksjonen i køoppgaver er viktig når du jobber med funksjoner og kode som har en tendens til å blokkere utførelse av programmet. Et eksempel på slik kode er nettverksforespørsler.
La oss diskutere hvordan vi kan bruke dette verktøyet.
Miljøoppsett
Før vi kan fortsette, må du sikre at du har et godt miljø. For dette vil du kreve en løpende versjon av Redis -serveren, Python 3 og Pip installert.
Vi vil illustrere installasjonen og oppsettet på et Ubuntu -system.
Begynn med å oppdatere pakkene og installer Redis -serveren ved å bruke kommandoene som er vist nedenfor:
sudo apt-get oppdatering
sudo apt -get installer redis -y
Når den er fullført, start Redis -serveren ved å bruke kommandoen:
sudo service redis-server start
Neste trinn er å installere python3 og pip på systemet vårt. Hopp gjerne til de neste seksjonene hvis du har installert Python.
sudo apt-get install python3.9 python3 -pip -y
Deretter bruker du PIP for å installere RQ -biblioteket.
sudo pip3 installer RQ
Kommandoen ovenfor vil laste ned og installere RQ -biblioteket, og vi kan begynne å bruke det.
Arbeider med Redis -køen
For å illustrere ved hjelp av RQ -biblioteket, vil vi bruke en enkel HTTP -forespørsel. I vårt eksempel vil vi lage en enkel funksjon som gjør en API -samtale til IPIFY.org og få vår nåværende IP -adresse. Funksjonen gir en HTTP -forespørsel til serveren, noe som betyr at den er en blokkeringsfunksjon.
Lag en enkel Python -fil og ring den ip.py. Neste, skriv inn koden som:
Importer forespørslerOvennevnte kode vil returnere din nåværende IP -adresse. Du vil merke at forespørselen tar noen sekunder å løse og serveren å svare. Dette betyr at resten av koden er blokkert til denne blokken er utført.
Et eksempel svar fra koden over er som vist:
'ip': '185.156.46.41 'For å forhindre at funksjonen blokkerer utførelsen av programmet, kan vi gi den til RQ, som kan behandles som en asynkron oppgave.
Vi kan gjøre dette ved å importere RQ -biblioteket, lage en enkel kø og kø vår blokkeringsfunksjon.
Lag en enkel python -fil og ring den print_ip. Skriv inn koden som vist:
fra Redis import redisLagre og lukk filen.
Vi må drive en arbeider i arbeidskatalogen vår for å behandle oppgavene i bakgrunnen i bakgrunnen.
En arbeider er en Python -prosess som kjører i bakgrunnen for å utføre blokkering av oppgaver i koden. RQ bruker funksjonaliteten til arbeidere for å utføre enqueued oppgaver.
For å utføre koden i forrige eksempel, åpner du et nytt terminalvindu og navigerer til arbeidskatalogen din (der Python -koden er lokalisert).
Neste, utfør kommandoen nedenfor for å starte arbeideren.
RQ Worker-With-SchedulerKommandoen over skal starte arbeideren som vist:
Hvis du ikke trenger en planlegger, kan du fjerne alternativet -med planlegging.
Når arbeideren kjører, utfør koden:
python3 print_ip.pyDu skal nå se informasjonen om oppgavene som er skrevet ut i Worker -vinduet som vist:
For å få presis informasjon om den ikke-blokkerende funksjonen i denne funksjonen, kan du prøve å legge til en haug med utskriftsuttalelser etter den.
Du vil merke at utskriftsuttalelsene skrives ut umiddelbart etter at filen er utført til tross for at forespørslene tar en stund å behandle.
Konklusjon
Denne guiden leder deg gjennom det grunnleggende om å jobbe med Redis -køen. Selv om vi bruker enkle eksempler i denne guiden, vil det forhåpentligvis gi deg et utgangspunkt for å implementere mer komplekse alternativer. Vurder å lese RQ -dokumentasjonen for å lære mer.