Python vairāku apstrādes rinda

Python Vairaku Apstrades Rinda



Vissvarīgākais datu struktūras elements ir rinda. Datu struktūras rinda “pirmais iekšā, pirmais ārā”, kas ir Python daudzapstrādes pamatā, ir salīdzināma. Procesa funkcijai tiek nodrošinātas rindas, lai process varētu apkopot datus. Pirmais datu vienums, kas jāizslēdz no rindas, ir pirmais ievadāmais vienums. Mēs izmantojam rindas metodi “put()”, lai rindai pievienotu, un metodi “get()”, lai izgūtu datus no rindas.

1. piemērs. Metodes Queue() izmantošana, lai izveidotu vairāku apstrādes rindu programmā Python

Šajā piemērā mēs izveidojam vairāku apstrādes rindu programmā Python, izmantojot metodi “queue()”. Daudzapstrāde attiecas uz viena vai vairāku CPU izmantošanu sistēmā, lai vienlaikus veiktu divus vai vairākus procesus. Multiprocessing, Python konstruēts modulis, atvieglo pārslēgšanos starp procesiem. Pirms strādāt ar vairāku apstrādi, mums ir jāiepazīstas ar procesa īpašībām. Mēs apzināmies, ka rinda ir būtiska datu modeļa sastāvdaļa. Standarta datu rinda, kuras pamatā ir ideja “First-In-First-Out”, un Python daudzapstrāde ir precīzi līdzinieki. Parasti rindā tiek saglabāts Python objekts, un tā ir ļoti svarīga datu pārsūtīšanai starp uzdevumiem.







Rīks “spyder” tiek izmantots, lai ieviestu Python skriptu, tāpēc vienkārši sāksim darbu. Vispirms mums ir jāimportē vairāku apstrādes modulis, jo mēs palaižam Python vairāku apstrādes skriptu. Mēs to izdarījām, importējot vairāku apstrādes moduli kā “m”. Izmantojot “m.queue()” paņēmienu, mēs izsaucam daudzapstrādes metodi “queue()”. Šeit mēs izveidojam mainīgo ar nosaukumu “queue” un ievietojam tajā vairāku apstrādes metodi “queue()”. Tā kā mēs zinām, ka rindā preces tiek glabātas 'pirmais iekšā, pirmais ārā' secībā, vispirms tiek noņemta prece, kuru pievienojam vispirms. Pēc daudzapstrādes rindas palaišanas mēs izsaucam metodi “print()”, kā argumentu nododot paziņojumu “Ir daudzapstrādes rinda”, lai to parādītu ekrānā. Pēc tam, tā kā mēs glabājam izveidoto rindu šajā mainīgajā, mēs izdrukājam rindu, nododot mainīgo “queue” metodes “print()” iekavās.




Nākamajā attēlā redzams, ka Python vairāku apstrādes rinda tagad ir izveidota. Vispirms tiek parādīts drukātais paziņojums. Pēc tam, kad šī daudzapstrādes rinda ir izveidota norādītajā atmiņas adresē, to var izmantot, lai pārsūtītu atšķirīgos datus starp diviem vai vairākiem darbojošiem procesiem.







2. piemērs: metodes “Qsize()” izmantošana, lai noteiktu vairāku apstrādes rindas lielumu programmā Python

Šajā gadījumā mēs nosakām vairāku apstrādes rindas lielumu. Lai aprēķinātu vairāku apstrādes rindas lielumu, mēs izmantojam metodi “qsize()”. Funkcija “qsize()” atgriež Python vairāku apstrādes rindas reālo izmēru. Citiem vārdiem sakot, šī metode nodrošina kopējo rindā esošo vienumu skaitu.

Sāksim ar Python vairāku apstrādes moduļa importēšanu kā “m” pirms koda palaišanas. Pēc tam, izmantojot komandu “m.queue()”, mēs izsaucam daudzapstrādes funkciju “queue()” un ievietojam rezultātu mainīgajā “Queue”. Pēc tam, izmantojot metodi “put()”, mēs pievienojam vienumus rindai nākamajā rindā. Šo metodi izmanto, lai pievienotu datus rindai. Tāpēc mēs izsaucam “Rindu” ar metodi “put()” un kā elementu iekavās sniedzam veselus skaitļus. Mēs pievienojam skaitļus “1”, “2”, “3”, “4”, “5”, “6” un “7”, izmantojot funkcijas “put()”.



Turklāt, izmantojot “Queue”, lai iegūtu vairāku apstrādes rindas lielumu, mēs izsaucam “qsize()” ar vairāku apstrādes rindu. Pēc tam jaunizveidotajā mainīgajā “rezultāts” saglabājam metodes “qsize()” rezultātu. Pēc tam mēs izsaucam metodi “print()” un kā parametru nododam paziņojumu “Daudzapstrādes rindas lielums ir”. Tālāk mēs izsaucam mainīgo “rezultāts” funkcijā “print()”, jo šajā mainīgajā tiek saglabāts lielums.


Izvades attēla izmērs ir parādīts. Tā kā mēs izmantojam funkciju “put()”, lai pievienotu septiņus elementus daudzapstrādes rindai, un funkciju “qsize()”, lai noteiktu lielumu, tiek parādīts vairāku apstrādes rindas izmērs “7”. Ievades paziņojums “daudzapstrādes rindas lielums” tiek parādīts pirms lieluma.

3. piemērs: Metodes “Put()” un “Get()” izmantošana Python daudzprocesuālās apstrādes rindā

Šajā piemērā tiek izmantotas rindu metodes “put()” un “get()” no Python daudzprocesuālās rindas. Šajā piemērā mēs izstrādājam divas lietotāja definētas funkcijas. Šajā piemērā mēs definējam funkciju, lai izveidotu procesu, kas rada “5” nejaušus veselus skaitļus. Mēs izmantojam arī metodi “put()”, lai tos pievienotu rindai. Metode “put()” tiek izmantota, lai vienumus ievietotu rindā. Pēc tam, lai izgūtu skaitļus no rindas un atgrieztu to vērtības, mēs rakstām citu funkciju un izsaucam to procedūras laikā. Mēs izmantojam funkciju “get()”, lai izgūtu skaitļus no rindas, jo šī metode tiek izmantota, lai izgūtu datus no rindas, ko ievietojam, izmantojot metodi “put()”.

Sāksim ieviest kodu tūlīt. Pirmkārt, mēs importējam četras bibliotēkas, kas veido šo skriptu. Vispirms mēs importējam “miegu” no laika moduļa, lai aizkavētu izpildi uz noteiktu laiku, ko mēra sekundēs, kam seko “izlases” no nejaušā moduļa, ko izmanto nejaušu skaitļu ģenerēšanai, pēc tam “apstrādājam” no daudzapstrādes, jo šis kods rada procesu. , un, visbeidzot, “rinda” no daudzapstrādes. Sākotnēji izveidojot klases gadījumu, rindu var izmantot. Pēc noklusējuma tas izveido bezgalīgu rindu vai rindu bez maksimālā lieluma. Iestatot maksimālā izmēra opciju uz skaitli, kas ir lielāks par nulli, ir iespējams izveidot izveidi ar izmēra ierobežojumu.


Mēs definējam funkciju. Pēc tam, tā kā šī funkcija ir lietotāja definēta, mēs tai piešķiram nosaukumu “function1” un kā argumentu nododam terminu “rinda”. Pēc tam mēs izsaucam funkciju “print()”, nododot tai “builder: Running”, “flush” un objekta “True” paziņojumus. Python drukas funkcijai ir unikāla opcija, ko sauc par skalošanu, kas ļauj lietotājam izvēlēties, vai buferēt šo izvadi. Nākamais solis ir uzdevuma ģenerēšana. Lai to izdarītu, mēs izmantojam “for” un izveidojam mainīgo “m” un iestatām diapazonu uz “5”. Pēc tam nākamajā rindā izmantojiet “random()” un saglabājiet rezultātu mūsu izveidotajā mainīgajā, kas ir “value”. Tas norāda, ka funkcija tagad pabeidz savas piecas iterācijas, katrai iterācijai izveidojot nejaušu veselu skaitli no 0 līdz 5.

Pēc tam nākamajā darbībā mēs izsaucam funkciju “sleep()” un nododam argumentu “value”, lai atliktu daļu uz noteiktu sekunžu skaitu. Pēc tam mēs izsaucam “rindu” ar metodi “put()”, lai būtībā pievienotu rindai vērtību. Pēc tam lietotājs tiek informēts, ka nav jāveic turpmāks darbs, vēlreiz izsaucot metodi “queue.put()” un nododot vērtību “Nav”. Pēc tam mēs palaižam metodi “print()”, nododam paziņojumu “builder: ready” kopā ar “flush” un iestatām to uz “True”.


Tagad mēs definējam otru funkciju “function2” un kā argumentu tai piešķiram atslēgvārdu “rinda”. Pēc tam mēs izsaucam funkciju “print()”, nododot ziņojumu “User: Running” un “flush”, kas ir iestatīts uz “True”. Mēs sākam “function2” darbību, izmantojot nosacījumu while true, lai izņemtu datus no rindas un ievietotu tos jaunizveidotajā mainīgajā “vienums”. Pēc tam mēs izmantojam nosacījumu “ja”, “vienums nav”, lai pārtrauktu cilpu, ja nosacījums ir patiess. Ja vienums nav pieejams, tas tiek apturēts un lietotājam to pieprasa. Uzdevums aptur cilpu un beidz šajā gadījumā, ja vienums, kas iegūts no vērtības, ir nulle. Pēc tam nākamajā darbībā mēs izsaucam funkciju “print()” un nodrošinām tai atskaiti “User: ready” un parametrus “flush=True”.


Pēc tam mēs ievadām galveno procesu, izmantojot “If-name = main_”. Mēs izveidojam rindu, izsaucot metodi “queue()” un saglabājot to mainīgajā “queue”. Tālāk mēs izveidojam procesu, izsaucot lietotāja funkciju “function2”. Šim nolūkam mēs saucam par 'procesa' klasi. Tā iekšpusē mēs nododam “target=function2”, lai izsauktu funkciju procesā, nododam argumentu “queue” un saglabājam to mainīgajā “User_process”. Pēc tam process sākas, izsaucot metodi “start()” ar mainīgo “User_process”. Pēc tam mēs atkārtojam to pašu procedūru, lai procesā izsauktu funkciju “function1” un ievietotu to mainīgajā “veidotāja process”. Pēc tam mēs izsaucam procesus, izmantojot metodi “join()”, lai gaidītu izpildi.


Tagad, kad tas ir parādīts, izvadē varat redzēt abu funkciju paziņojumus. Tas parāda vienumus, kurus pievienojām, izmantojot “put()” un “get()”, izmantojot attiecīgi metodes “get()”.

Secinājums

Par Python vairāku apstrādes rindu mēs uzzinājām šajā rakstā. Mēs izmantojām dotās ilustrācijas. Sākumā mēs aprakstījām, kā izveidot rindu Python daudzapstrādes procesā, izmantojot funkciju queue(). Pēc tam mēs izmantojām metodi “qsize()”, lai noteiktu rindu. Mēs izmantojām arī rindas put() un get() metodes. Pēdējā piemērā tika apspriesta gan laika moduļa miega klase, gan nejaušā moduļa nejaušā klase.