Večprocesna zanka Python

Vecprocesna Zanka Python



Večprocesiranje je primerljivo z večnitnostjo. Vendar pa se razlikuje po tem, da lahko izvajamo samo eno nit naenkrat zaradi GIL-a, ki se uporablja za nizanje niti. Večprocesiranje je postopek zaporednega izvajanja operacij v več jedrih CPE. Niti ni mogoče upravljati vzporedno. Vendar pa nam večprocesiranje omogoča vzpostavitev procesov in njihovo sočasno izvajanje na različnih jedrih CPU. Zanka, kot je for-loop, je eden najpogosteje uporabljenih skriptnih jezikov. Ponovite isto delo z uporabo različnih podatkov, dokler ni dosežen kriterij, kot je vnaprej določeno število ponovitev. Zanka opravi vsako ponovitev eno za drugo.

1. primer:  Uporaba zanke For v večprocesnem modulu Python

V tem primeru uporabljamo zanko for in postopek razreda večprocesnega modula Python. Začnemo z zelo enostavnim primerom, da boste lahko hitro razumeli, kako deluje večprocesna zanka Python. Z uporabo vmesnika, ki je primerljiv z modulom za navoje, večprocesiranje združuje ustvarjanje procesov.







Z uporabo podprocesov namesto niti večprocesni paket zagotavlja lokalno in oddaljeno sočasnost, s čimer se izogne ​​globalnemu zaklepanju tolmača. Uporabite for-zanko, ki je lahko objekt niza ali tuple, za nenehno ponavljanje skozi zaporedje. To deluje manj kot ključna beseda v drugih programskih jezikih in bolj kot metoda iteratorja v drugih programskih jezikih. Če začnete novo večprocesiranje, lahko zaženete zanko for, ki hkrati izvaja proceduro.



Začnimo z implementacijo kode za izvajanje kode z uporabo orodja 'spyder'. Verjamemo, da je 'spyder' tudi najboljši za poganjanje Pythona. Uvozimo proces večprocesnega modula, ki ga izvaja koda. Večprocesiranje v konceptu Python, imenovano »razred procesa«, ustvari nov proces Python, mu da metodo za izvajanje kode in nadrejeni aplikaciji način za upravljanje izvajanja. Razred Process vsebuje procedure start() in join(), ki sta ključnega pomena.



Nato definiramo uporabniško definirano funkcijo, imenovano 'func'. Ker gre za uporabniško definirano funkcijo, ji damo ime po lastni izbiri. Znotraj telesa te funkcije posredujemo spremenljivko »subject« kot argument in vrednost »maths«. Nato pokličemo funkcijo »print()« in posredujemo stavek »Ime skupnega predmeta je« ter njegov argument »predmet«, ki vsebuje vrednost. Nato v naslednjem koraku uporabimo »if name== _main_«, ki vam prepreči zagon kode, ko je datoteka uvožena kot modul, in vam to dovoli le, ko se vsebina izvaja kot skript.





Razdelek s pogoji, s katerim začnete, se lahko v večini primerov obravnava kot lokacija za zagotavljanje vsebine, ki naj se izvede le, ko se vaša datoteka izvaja kot skript. Nato uporabimo argument subjekt in vanj shranimo nekaj vrednosti, ki so 'znanost', 'angleščina' in 'računalnik'. Postopek nato v naslednjem koraku dobi ime »proces1[]«. Nato uporabimo »process(target=func)« za klic funkcije v procesu. Target se uporablja za klic funkcije, ta proces pa shranimo v spremenljivko 'P'.

Nato uporabimo »process1« za klic funkcije »append()«, ki doda element na konec seznama, ki ga imamo v funkciji »func«. Ker je proces shranjen v spremenljivki »P«, posredujemo »P« tej funkciji kot njen argument. Nazadnje uporabimo funkcijo 'start()' s 'P', da začnemo postopek. Po tem znova zaženemo metodo, medtem ko podamo argument »predmet« in uporabimo »za« v predmetu. Nato s ponovno uporabo metode »process1« in »add()« začnemo postopek. Postopek se nato zažene in izhod se vrne. Postopek se nato konča s tehniko »join()«. Procesi, ki ne pokličejo postopka »join()«, se ne bodo zaprli. Ena od ključnih točk je, da je treba uporabiti parameter ključne besede »args«, če želite skozi postopek zagotoviti kakršne koli argumente.




Zdaj lahko v izhodu vidite, da se izjava najprej prikaže s posredovanjem vrednosti za predmet »matematika«, ki jo posredujemo funkciji »func«, ker jo najprej pokličemo s funkcijo »process«. Nato uporabimo ukaz 'append()', da imamo vrednosti, ki so že bile na seznamu, ki je dodan na koncu. Nato so bili predstavljeni »znanost«, »računalništvo« in »angleščina«. Toda, kot lahko vidite, vrednosti niso v pravilnem zaporedju. To je zato, ker to storijo takoj, ko je postopek končan, in sporočijo svoje sporočilo.

Primer 2: Pretvorba zaporedne zanke For v večprocesno vzporedno zanko For

V tem primeru se opravilo z večprocesno zanko izvaja zaporedno, preden se pretvori v vzporedno opravilo zanke za. Z zankami for lahko krožite skozi zaporedja, kot je zbirka ali niz, v vrstnem redu, kot se pojavijo.

Zdaj pa začnimo izvajati kodo. Najprej uvozimo 'spanje' iz časovnega modula. Z uporabo postopka »sleep()« v časovnem modulu lahko začasno prekinete izvajanje klicne niti za poljubno dolgo. Nato uporabimo »random« iz modula random, definiramo funkcijo z imenom »func« in posredujemo ključno besedo »argu«. Nato ustvarimo naključno vrednost z uporabo »val« in jo nastavimo na »naključno«. Nato za kratek čas blokiramo z metodo »sleep()« in posredujemo »val« kot parameter. Nato za prenos sporočila zaženemo metodo »print()«, pri čemer posredujemo besede »ready« in ključno besedo »arg« kot njen parameter ter »created« in posredujemo vrednost z uporabo »val«.

Na koncu uporabimo 'flush' in ga nastavimo na 'True'. Uporabnik se lahko odloči, ali bo izpis v medpomnilniku ali ne z možnostjo izpiranja v funkciji tiskanja Pythona. Privzeta vrednost tega parametra False pomeni, da izhod ne bo medpomnilnik. Izhod je prikazan kot niz vrstic, ki si sledijo ena za drugo, če jo nastavite na true. Nato uporabimo »if name== main«, da zavarujemo vstopne točke. Nato nalogo izvajamo zaporedno. Tukaj smo nastavili obseg na '10', kar pomeni, da se zanka konča po 10 ponovitvah. Nato pokličemo funkcijo »print()«, ji posredujemo vhodni stavek »ready« in uporabimo možnost »flush=True«.


Zdaj lahko vidite, da ko izvedemo kodo, zanka povzroči, da se funkcija zažene '10'-krat. Ponavlja se 10-krat, začenši pri indeksu nič in konča pri indeksu devet. Vsako sporočilo vsebuje številko opravila, ki je številka funkcije, ki jo posredujemo kot »arg«, in številko ustvarjanja.


Ta zaporedna zanka se zdaj preoblikuje v večprocesno vzporedno for-zanko. Uporabljamo isto kodo, vendar bomo uporabili nekaj dodatnih knjižnic in funkcij za večprocesiranje. Zato moramo uvoziti proces iz multiprocesiranja, tako kot smo razložili prej. Nato ustvarimo funkcijo z imenom 'func' in posredujemo ključno besedo 'arg', preden uporabimo 'val=random', da dobimo naključno število.

Potem, ko prikličemo metodo »print()« za prikaz sporočila in dodelimo parameter »val« za kratko zakasnitev, uporabimo funkcijo »if name= main« za zaščito vstopnih točk. Nato ustvarimo proces in pokličemo funkcijo v procesu z uporabo 'process' in posredujemo 'target=func'. Nato posredujemo »func«, »arg«, posredujemo vrednost »m« in posredujemo obseg »10«, kar pomeni, da zanka prekine funkcijo po »10« ponovitvah. Nato zaženemo postopek z metodo »start()« s »process«. Nato pokličemo metodo »join()«, da počakamo na izvedbo procesa in nato dokončamo vse procese.


Ko torej izvedemo kodo, funkcije pokličejo glavni proces in začnejo z izvajanjem. Vendar se izvajajo, dokler niso opravljene vse naloge. To lahko vidimo, ker se vsaka naloga izvaja sočasno. Svoje sporočilo sporoči takoj, ko je končano. To pomeni, da čeprav sporočila niso v redu, se zanka konča, ko je vseh '10' ponovitev končanih.

Zaključek

V tem članku smo obravnavali Python večprocesno zanko for. Predstavili smo tudi dve ilustraciji. Prva ilustracija prikazuje, kako uporabiti zanko for v večprocesorski knjižnici zanke Python. Druga ilustracija pa prikazuje, kako spremeniti zaporedno zanko for v vzporedno večprocesno zanko for. Pred izdelavo skripta za Python večprocesiranje moramo uvoziti večprocesni modul.