Python višeprocesna petlja

Python Viseprocesna Petlja



Višestruka obrada je usporediva s višenitnom obradom. Međutim, razlikuje se po tome što možemo izvršiti samo jednu nit u trenutku zbog GIL-a koji se koristi za niti. Višeprocesiranje je postupak uzastopnog izvođenja operacija na nekoliko CPU jezgri. Nitima ne može se upravljati paralelno. Međutim, višeprocesiranje nam omogućuje da uspostavimo procese i pokrenemo ih istovremeno na različitim CPU jezgrama. Petlja, kao što je for-petlja, jedan je od najčešće korištenih skriptnih jezika. Ponovite isti rad koristeći različite podatke dok se ne postigne kriterij, kao što je unaprijed određeni broj ponavljanja. Petlja izvršava svaku iteraciju jednu po jednu.

Primjer 1:  Korištenje For-Loop u Python višeprocesnom modulu

U ovom primjeru koristimo for-petlju i proces klase višeprocesnog modula Python. Počinjemo s vrlo jednostavnim primjerom kako biste mogli brzo razumjeti kako funkcionira Python višeprocesna for-petlja. Koristeći sučelje koje je usporedivo s modulom threadinga, multiprocesiranje uključuje stvaranje procesa.







Upotrebom podprocesa umjesto niti, višeprocesni paket pruža i lokalnu i udaljenu konkurentnost, čime se izbjegava Globalno zaključavanje tumača. Koristite for-petlju, koja može biti string objekt ili tuple, za kontinuirano ponavljanje niza. Ovo djeluje manje kao ključna riječ viđena u drugim programskim jezicima, a više kao metoda iteratora koja se nalazi u drugim programskim jezicima. Pokretanjem nove višestruke obrade, možete pokrenuti for-petlju koja istodobno izvršava proceduru.



Počnimo s implementacijom koda za izvršavanje koda pomoću alata 'spyder'. Vjerujemo da je 'spyder' također najbolji za pokretanje Pythona. Uvozimo proces višeprocesnog modula koji kod izvodi. Multiprocesiranje u Python konceptu nazvano 'klasa procesa' stvara novi Python proces, daje mu metodu za izvršavanje koda i daje nadređenoj aplikaciji način za upravljanje izvršenjem. Klasa Process sadrži procedure start() i join(), koje su obje ključne.



Zatim definiramo korisnički definiranu funkciju pod nazivom 'func'. Budući da je to korisnički definirana funkcija, dajemo joj naziv po vlastitom izboru. Unutar tijela ove funkcije prosljeđujemo varijablu 'subject' kao argument i vrijednost 'maths'. Zatim pozivamo funkciju 'print()', prosljeđujući izjavu 'Ime zajedničkog subjekta je', kao i njegov argument 'subjekt' koji sadrži vrijednost. Zatim, u sljedećem koraku koristimo “if name== _main_,” koji vas sprječava da pokrenete kod kada je datoteka uvezena kao modul i dopušta vam da to učinite samo kada se sadržaj izvršava kao skripta.





Odjeljak uvjeta s kojim počinjete može se u većini slučajeva smatrati mjestom za pružanje sadržaja koji bi se trebao izvršiti samo kada se vaša datoteka izvodi kao skripta. Zatim koristimo argument subjekt i u njega spremamo neke vrijednosti koje su 'znanost', 'engleski' i 'računalo'. Procesu se tada u sljedećem koraku daje naziv “proces1[]”. Zatim koristimo “process(target=func)” za pozivanje funkcije u procesu. Target se koristi za pozivanje funkcije, a taj proces spremamo u varijablu “P”.

Zatim koristimo “process1” za pozivanje funkcije “append()” koja dodaje stavku na kraj popisa koji imamo u funkciji “func.” Budući da je proces pohranjen u varijabli 'P', prosljeđujemo 'P' ovoj funkciji kao njen argument. Na kraju, koristimo funkciju 'start()' s 'P' za pokretanje procesa. Nakon toga ponovno pokrećemo metodu dok upisujemo argument 'predmet' i koristimo 'za' u predmetu. Zatim, ponovno koristeći “process1” i “add()” metodu, započinjemo proces. Proces se tada pokreće i vraća se izlaz. Proceduri se tada kaže da završi korištenjem tehnike 'join()'. Procesi koji ne pozivaju proceduru “join()” neće izaći. Jedna ključna točka je da se mora koristiti parametar ključne riječi 'args' ako želite pružiti bilo kakve argumente kroz proces.




Sada možete vidjeti u izlazu da se izjava prvo prikazuje prosljeđivanjem vrijednosti za predmet 'matematika' koju prosljeđujemo u funkciju 'func' jer je prvo pozivamo pomoću funkcije 'proces'. Zatim koristimo naredbu “append()” da bismo imali vrijednosti koje su već bile na popisu koji se dodaje na kraju. Zatim su predstavljeni “znanost”, “računalo” i “engleski jezik”. Ali, kao što vidite, vrijednosti nisu u ispravnom nizu. To je zato što to čine čim je postupak završen i prijavljuju svoju poruku.

Primjer 2: Pretvorba sekvencijalne For-petlje u višeprocesnu paralelnu For-petlju

U ovom primjeru, višeprocesni zadatak petlje izvršava se sekvencijalno prije nego što se pretvori u paralelni zadatak for-petlje. Možete kružiti kroz sekvence poput zbirke ili niza redoslijedom kojim se pojavljuju pomoću for-petlji.

Sada počnimo s implementacijom koda. Prvo uvozimo 'spavanje' iz vremenskog modula. Koristeći proceduru 'sleep()' u vremenskom modulu, možete obustaviti izvršenje pozivajuće niti koliko god želite. Zatim koristimo 'random' iz modula random, definiramo funkciju pod nazivom 'func' i prosljeđujemo ključnu riječ 'argu'. Zatim stvaramo slučajnu vrijednost pomoću 'val' i postavljamo je na 'random'. Zatim blokiramo na kratko korištenje metode 'sleep()' i prosljeđujemo 'val' kao parametar. Zatim, za prijenos poruke, pokrećemo metodu “print()”, prosljeđujući riječi “ready” i ključnu riječ “arg” kao njen parametar, kao i “created” i prosljeđujemo vrijednost koristeći “val”.

Na kraju, koristimo 'ispiranje' i postavljamo ga na 'Istina'. Korisnik može odlučiti hoće li ili ne pohraniti izlaz pomoću opcije ispiranja u funkciji ispisa Pythona. Zadana vrijednost ovog parametra False označava da se izlaz neće spremati u međuspremnik. Izlaz se prikazuje kao niz redaka koji slijede jedan za drugim ako ga postavite na istinito. Zatim koristimo 'if name== main' da osiguramo ulazne točke. Zatim izvršavamo posao uzastopno. Ovdje smo postavili raspon na “10” što znači da petlja završava nakon 10 ponavljanja. Zatim pozivamo funkciju 'print()', prosljeđujemo joj ulaznu naredbu 'ready' i koristimo opciju 'flush=True'.


Sada možete vidjeti da kada izvršimo kod, petlja uzrokuje pokretanje funkcije '10' puta. Ponavlja se 10 puta, počevši od indeksa nula i završavajući kod indeksa devet. Svaka poruka sadrži broj zadatka koji je broj funkcije koji prosljeđujemo kao 'arg' i broj kreacije.


Ova sekvencijalna petlja sada se transformira u višeprocesnu paralelnu for-petlju. Koristimo isti kod, ali idemo na neke dodatne biblioteke i funkcije za višeprocesiranje. Stoga moramo uvesti proces iz multiprocesiranja, kao što smo ranije objasnili. Zatim stvaramo funkciju pod nazivom 'func' i prosljeđujemo ključnu riječ 'arg' prije upotrebe 'val=random' za dobivanje slučajnog broja.

Zatim, nakon pozivanja metode 'print()' za prikaz poruke i davanja parametra 'val' za malu odgodu, koristimo funkciju 'if name= main' za osiguranje ulaznih točaka. Nakon toga kreiramo proces i pozivamo funkciju u procesu koristeći 'process' i prosljeđujemo 'target=func'. Zatim prosljeđujemo “func”, “arg”, prosljeđujemo vrijednost “m” i prosljeđujemo raspon “10” što znači da petlja prekida funkciju nakon “10” ponavljanja. Zatim pokrećemo proces pomoću metode 'start()' s 'process'. Zatim pozivamo metodu “join()” da pričekamo izvršenje procesa i da nakon toga dovršimo sve procese.


Stoga, kada izvršavamo kod, funkcije pozivaju glavni proces i započinju svoje izvršenje. Oni su, međutim, gotovi dok se svi zadaci ne izvrše. To možemo vidjeti jer se svaki zadatak izvršava istovremeno. Javlja svoju poruku čim završi. To znači da iako poruke nisu u redu, petlja završava nakon što se završi svih “10” ponavljanja.

Zaključak

U ovom smo članku obradili Python višeprocesnu for-petlju. Predstavili smo i dvije ilustracije. Prva ilustracija pokazuje kako koristiti for-petlju u Pythonovoj biblioteci za višestruku obradu petlji. A druga ilustracija pokazuje kako promijeniti sekvencijalnu for-petlju u paralelnu višeprocesnu for-petlju. Prije konstruiranja skripte za Python višeprocesiranje, moramo uvesti višeprocesni modul.