Python višeprocesni red čekanja

Python Viseprocesni Red Cekanja



Najvažniji element strukture podataka je red čekanja. Red čekanja strukture podataka 'prvi ušao, prvi izašao' koji je osnova za Python višeprocesiranje je usporediv. Funkciji procesa pružaju se redovi čekanja kako bi se procesu omogućilo prikupljanje podataka. Prva stavka podataka koja se eliminira iz reda je prva stavka koja se unosi. Koristimo metodu 'put()' reda za dodavanje podataka u red i njegovu metodu 'get()' za dohvaćanje podataka iz reda.

1. primjer: korištenje metode Queue() za stvaranje višeprocesnog reda u Pythonu

U ovom primjeru stvaramo višeprocesni red čekanja u Pythonu pomoću metode 'queue()'. Multiprocesiranje se odnosi na korištenje jednog ili više CPU-a u sustavu za izvođenje dva ili više procesa istovremeno. Multiprocessing, konstruirani modul u Pythonu, olakšava prebacivanje između procesa. Moramo biti upoznati sa svojstvom procesa prije rada s višeprocesiranjem. Svjesni smo da je red ključna komponenta podatkovnog modela. Standardni red čekanja podataka, koji je izgrađen na ideji 'prvi-ušao-prvi-vani', i Python višeprocesiranje su točni parnjaci. Općenito, red pohranjuje Python objekt i ključan je za prijenos podataka između zadataka.







Alat 'spyder' koristi se za implementaciju prisutne Python skripte, pa jednostavno počnimo. Prvo moramo uvesti višeprocesni modul jer izvodimo Python višeprocesnu skriptu. Učinili smo to uvozom višeprocesnog modula kao 'm'. Koristeći tehniku ​​“m.queue()”, pozivamo višeprocesnu metodu “queue()”. Ovdje stvaramo varijablu pod nazivom 'queue' i u nju postavljamo višeprocesnu metodu 'queue()'. Kako znamo da red čekanja pohranjuje stavke u redoslijedu 'prvi ušao, prvi izašao', stavka koju smo dodali prva prva se uklanja. Nakon pokretanja višeprocesnog reda čekanja, pozivamo metodu 'print()', prosljeđujući izjavu 'Postoji višeprocesni red čekanja' kao njen argument da ga prikažemo na ekranu. Zatim, budući da pohranjujemo konstruirani red u ovu varijablu, ispisujemo red prosljeđivanjem varijable 'queue' u zagradama metode 'print()'.




Sljedeća slika pokazuje da je Python višeprocesni red sada konstruiran. Prvo se prikazuje izjava za ispis. Nakon što se ovaj višeprocesni red čekanja konstruira u naznačenoj memorijskoj adresi, može se koristiti za prijenos različitih podataka između dva ili više pokrenutih procesa.







Primjer 2: Korištenje metode 'Qsize()' za određivanje veličine reda čekanja za više obrada u Pythonu

U ovom slučaju određujemo veličinu reda čekanja za višestruku obradu. Za izračunavanje veličine višeprocesnog reda čekanja koristimo metodu “qsize()”. Funkcija “qsize()” vraća stvarnu veličinu Python višeprocesnog reda. Drugim riječima, ova metoda daje ukupan broj stavki u redu.

Počnimo s uvozom Python višeprocesnog modula kao 'm' prije pokretanja koda. Zatim pomoću naredbe “m.queue()” pozivamo višeprocesnu funkciju “queue()” i stavljamo rezultat u varijablu “Queue”. Zatim pomoću metode “put()” dodajemo stavke u red čekanja u sljedećem retku. Ova se metoda koristi za dodavanje podataka u red čekanja. Stoga pozivamo 'Queue' s 'put()' metodom i navodimo cijele brojeve kao njen element u zagradama. Brojevi koje zbrajamo su “1”, “2”, “3”, “4”, “5”, “6” i “7” pomoću funkcije “put()”.



Nadalje, korištenjem 'Queue' za dobivanje veličine višeprocesnog reda, pozivamo 'qsize()' s višeprocesnim redom. Zatim, u novoformiranoj varijabli 'rezultat', spremamo ishod metode 'qsize()'. Nakon toga pozivamo metodu 'print()' i prosljeđujemo naredbu 'Veličina reda čekanja za više obrada je' kao njen parametar. Zatim pozivamo varijablu 'result' u funkciji 'print()' jer se veličina sprema u ovu varijablu.


Izlazna slika ima prikazanu veličinu. Budući da koristimo funkciju 'put()' za dodavanje sedam elemenata u višeprocesni red i funkciju 'qsize()' za određivanje veličine, prikazuje se veličina višeprocesnog reda '7'. Ulazna izjava 'veličina reda čekanja za više obrada' prikazana je prije veličine.

Primjer 3: Korištenje metode “Put()” i “Get()” u Python višeprocesnom redu čekanja

U ovom primjeru koriste se metode reda čekanja 'put()' i 'get()' iz Python višeprocesnog reda čekanja. U ovom primjeru razvijamo dvije korisnički definirane funkcije. U ovom primjeru definiramo funkciju za stvaranje procesa koji proizvodi '5' slučajnih cijelih brojeva. Također koristimo metodu 'put()' da ih dodamo u red čekanja. Metoda 'put()' koristi se za postavljanje stavki u red čekanja. Zatim, da bismo dohvatili brojeve iz reda čekanja i vratili njihove vrijednosti, napišemo drugu funkciju i pozovemo je tijekom postupka. Koristimo funkciju “get()” za dohvaćanje brojeva iz reda budući da se ova metoda koristi za dohvaćanje podataka iz reda čekanja koje umećemo pomoću metode “put()”.

Počnimo sada implementirati kod. Prvo uvozimo četiri biblioteke koje čine ovu skriptu. Prvo uvozimo 'sleep' iz vremenskog modula kako bismo odgodili izvršenje za neko vrijeme mjereno u sekundama, nakon čega slijedi 'random' iz nasumičnog modula koji se koristi za generiranje nasumičnih brojeva, zatim 'process' iz multiprocesiranja jer ovaj kod stvara proces , i konačno, 'red' iz multiprocesiranja. Početnom konstrukcijom instance klase, red se može koristiti. Prema zadanim postavkama, ovo uspostavlja beskonačni red ili red bez maksimalne veličine. Postavljanjem opcije maksimalne veličine na broj veći od nule, moguće je napraviti kreaciju s ograničenjem veličine.


Definiramo funkciju. Zatim, budući da je ova funkcija definirana od strane korisnika, dajemo joj naziv 'function1' i prosljeđujemo termin 'queue' kao njen argument. Nakon toga, pozivamo funkciju 'print()', prosljeđujući joj izjave 'builder: Running', 'flush' i objekt 'True' . Pythonova funkcija ispisa ima jedinstvenu opciju koja se zove flush koja korisniku omogućuje da odabere želi li ili ne spremati ovaj izlaz. Sljedeći korak je generiranje zadatka. Da bismo to učinili, koristimo 'za' i stvorimo varijablu 'm' i postavimo raspon na '5'. Zatim, u sljedećem retku upotrijebite 'random()' i pohranite rezultat u varijablu koju smo napravili, a koja je 'vrijednost'. To znači da funkcija sada završava svojih pet ponavljanja, pri čemu svaka iteracija stvara nasumični cijeli broj od 0 do 5.

Zatim, u sljedećem koraku, pozivamo funkciju 'sleep()' i prosljeđujemo argument 'vrijednost' da odgodimo dio na određeni broj sekundi. Zatim pozivamo 'red' metodom 'put()' kako bismo u biti dodali vrijednost u red. Korisnik je tada obaviješten da više nema posla tako da još jednom pozove metodu 'queue.put()' i proslijedi vrijednost 'None'. Zatim pokrećemo metodu 'print()', prosljeđujemo naredbu 'builder: ready' zajedno s 'flush' i postavljamo je na 'True'.


Sada definiramo drugu funkciju, 'function2', i dodijelimo joj ključnu riječ 'queue' kao njen argument. Zatim pozivamo funkciju 'print()' dok prosljeđujemo stanje izvješća 'Korisnik: Izvodi se' i 'ispiranje'  koje je postavljeno na 'Istina'. Započinjemo operaciju 'function2' korištenjem uvjeta while true za uzimanje podataka iz reda i njihovo stavljanje u novostvorenu varijablu 'item'. Zatim koristimo uvjet 'if', 'item is None', da prekinemo petlju ako je uvjet istinit. Ako nijedna stavka nije dostupna, zaustavlja se i od korisnika traži jednu. Zadatak zaustavlja petlju i završava u ovom slučaju ako je stavka koja je dobivena iz vrijednosti nula. Zatim, u sljedećem koraku, pozivamo funkciju 'print()' i pružamo joj izvješće 'User: ready' i parametre 'flush=True'.


Zatim ulazimo u glavni proces koristeći 'If-name = main_'. Red čekanja stvaramo pozivanjem metode 'queue()' i pohranjivanjem u varijablu 'queue'. Zatim stvaramo proces pozivanjem korisničke funkcije “function2”. Za ovo nazivamo klasu 'proces'. Unutar njega prosljeđujemo “target=function2” za pozivanje funkcije u procesu, prosljeđujemo argument “queue” i pohranjujemo ga u varijablu “User_process”. Proces tada počinje pozivanjem metode 'start()' s varijablom 'User_ process'. Zatim ponavljamo istu proceduru da pozovemo 'function1' u procesu i stavimo je u varijablu 'builder process'. Zatim pozivamo procese metodom 'join()' da čekaju izvršenje.


Sada kada je predstavljeno, možete vidjeti izjave obje funkcije u izlazu. Prikazuje stavke koje smo dodali pomoću metoda 'put()' i 'get()' pomoću metoda 'get()'.

Zaključak

U ovom smo članku naučili o Python višeprocesnom redu čekanja. Iskoristili smo dane ilustracije. Na početku smo opisali kako stvoriti red čekanja u Python multiprocesiranju pomoću funkcije queue(). Zatim smo upotrijebili metodu 'qsize()' za određivanje reda čekanja. Također smo koristili metode čekanja put() i get(). Klasa spavanja vremenskog modula i slučajna klasa slučajnog modula bile su raspravljene u posljednjem primjeru.