Kaip geriausiai įgyvendinti daugiaprocesoriavimą „Python“?



Šis straipsnis supažindins jus su daugiaprocesoriavimu „Python“ ir proceso metu taip pat pateiks programinę demonstraciją.

2019-ieji buvo labai dideli technologinės plėtros metai visame pasaulyje. Pradedant nuo to, kad kompiuterių gamintojai prideda daugiau branduolių savo procesoriuose ir procesoriuose iki išmanesnių lustų paleidimo į mobiliuosius telefonus, daugiaprocesorinis procesas nebėra svajonė. Šiandien viena iš žymiausių programavimo kalbų, palaikanti daugiaprocesinį procesą, yra . Dėl to, kad leidime įdiegta lygiagreti apdorojimo galia, koduotojai visame pasaulyje dabar gali sklandžiai kurti kodus, kurie bus vykdomi vienu metu, taigi ir jų veikimo laiką.

Tolimesni patarimai bus aptarti šiame straipsnyje,



kaip atsispausdinti git įsipareigojimų žurnalą

Pradėkime,

Daugiafunkcinis apdorojimas „Python“

Kas yra daugiaprocesinis procesas?

Daugiaprocesinį procesą galima paprasčiausiai apibrėžti kaip sistemos sugebėjimą palaikyti daugiau nei vieną operaciją bet kuriuo konkrečiu atveju. Tai reiškia, kad programos daugiaprocesinėse sistemose yra suskirstytos į mažus gabalėlius ir tada vykdomos nepriklausomai viena nuo kitos, siekiant padidinti efektyvumą ir sumažinti bendrą veikimo laiką. Sistemoje esantis procesorius kiekvienam mažam gabalui skiria savarankišką giją, taip leisdamas jam veikti kaip atskirai.



Daugiaprocesinio apdorojimo poreikis

Įsivaizduokite kompiuterinę sistemą, kurios procesoriuje yra tik vienas branduolys. Jei šiam vieninteliam branduoliui priskiriamos kelios užduotys, jis pertraukia kiekvieną užduotį tarp jų ir pereina prie kitos. Tai nepadidins laiko, reikalingo kiekvienai užduočiai atlikti, bet taip pat sumažins bendrą sistemos efektyvumą.

Kita vertus, daugiaprocesorinis kompiuteris gali turėti vieną procesorių, kuris savo ruožtu turi kelis veikiančius įrenginius, vadinamus atskirais branduoliais, kurie vienu metu gali savarankiškai vykdyti keletą skirtingų užduočių. Tai ne tik padidina sistemos efektyvumą, bet ir ilgainiui žymiai sumažina sistemos veikimo laiką.



„Python“ daugiaprocesinė sistema gali būti dviejų tipų.

Daugiaprocesorinė sistema

Šioje sistemoje po jos gaubtu iš esmės yra keli procesoriai, kurie kiekvienas gali atlikti po vieną užduotį ir veikti kaip nepriklausomas komponentas.

Kelių branduolių procesoriaus sistema

Ši sistema turi kelis branduolius, esančius tame pačiame procesoriuje, kuriuose branduolys veikia kaip atskiras blokas ir savarankiškai vykdo jai priskirtas užduotis.

Daugiafunkcinio apdorojimo „Python“ kodas

Dabar, kai esate įpratę prie pagrindinės daugiaprocesorystės koncepcijos, leiskite mums patyrinėti, kaip galima pasiekti daugiaprocesoriavimą „Python“.

„Python“ vertėjas turi labai paprastą ir intuityvų API, kuris atlieka vieną užduotį, suskirsto ją į kelis komponentus ir apdoroja juos savarankiškai.

Pažvelkite į toliau pateiktą programos modulį, kad geriau suprastumėte šią daugiaprocesavimo python koncepciją.

1 pavyzdys

# importuojant daugiaprocesinį modulį importuoti daugiaprocesinį def print_cube (num): '' 'funkcija norint spausdinti nurodyto skaičiaus kubą' 'print (' Cube: {} '. format (num * num * num)) def print_square (num): Funkcija, skirta atspausdinti nurodyto skaičiaus kvadratą “(„ Kvadratas: {} “. formatas (skaičius * skaičius)), jei __pavadinimas = = '__main__': # procesų kūrimas p1 = daugiaprocesinis procesas. Procesas (tikslas = spausdinti args = (10,)) p2 = daugiaprocesinis procesas. Procesas (target = print_cube, args = (10,)) # pradinis procesas 1 p1.start () # paleidimo procesas 2 p2.start () # palaukite, kol baigsis 1 procesas p1 .join () # palaukite, kol bus baigtas 2 procesas p2.join () # abu procesai bus baigti spausdinti ('Atlikta!')

Rezultatas

Kvadratas: 100

Kubas: 1000

Padaryta!

Dabar išanalizuokime šią programą, kad ją geriau suprastume.

  1. Pirmasis žingsnis yra importuoti daugiaprocesorinį modulį. Norėdami tai padaryti, naudokite šią sintaksę: importuoti daugiaprocesinį procesą.

  2. Dabar, kai daugiaprocesorinis modulis buvo importuotas, eikime į priekį ir sukurkime procesą. Norėdami tai padaryti, mes sukuriame proceso klasės objektą ir priskiriame jam šiuos argumentus. Tikslas: funkcija, kurią reikia vykdyti šiame procese, ir argumentuoja: argumentai, kuriuos reikia perduoti tikslinei funkcijai.

Pastaba: Proceso konstruktorius turi galimybę priimti kelis tikslus ir argumentus, tačiau aukščiau pateiktame pavyzdyje mes savo procesui priskyrėme tik du tikslus ir argumentus, kaip parodyta žemiau.

p1 = daugiaprocesinis. Procesas (target = print_square, args = (10,))

p2 = daugiaprocesinis. Procesas (target = print_cube, args = (10,))

  1. Dabar, kai procesas jau sukurtas, parašykime to paties pradžios sintaksę.

p1.start ()

p2.start ()

Paleidus procesą, dabartinė programa ir jau vykdoma yra vykdomos vienu metu. Jei tam tikroje situacijoje turite sustabdyti dabartinės programos vykdymą ir sutelkti dėmesį tik į anksčiau egzistavusios programos vykdymą, mes naudojame sujungimo funkciją, kaip parodyta žemiau.

p1.prisijungti ()

p2.prijunkite ()

Kai įvesite šią sintaksę, vertėjas lauks, kol programa p1 baigs vykdyti, ir tada pereis prie programos p2.

Norėdami toliau suprasti šią sąvoką, pažvelkite į toliau pateiktą „Multiprocessing In Python“ pavyzdį.

2 pavyzdys

# daugiaprocesoriaus modulio importavimas importo daugiaprocesinio importo os def darbuotojas1 (): # spausdinimo proceso ID spausdinimas ('Procesą vykdančio darbuotojo ID: {}'. formatas (os.getpid ())) def darbuotojas2 (): # spausdinimo proceso ID spausdinimas ('Procesą vykdančio darbuotojo ID2: {}'. Formatas (os.getpid ())) jei __pavadinimas__ == '__main__': # spausdina pagrindinės programos proceso ID spausdinimą ('Pagrindinio proceso ID: {}'. Formatas (os .getpid ())) # procesų kūrimas p1 = daugybinis apdorojimas. Procesas (tikslas = darbuotojas1) p2 = daugiaprocesavimas. Procesas (tikslas = darbuotojas2) # procesų paleidimas p1.start () p2.start () # proceso ID spausdinimas ('ID procesas p1: {} '. format (p1.pid)) spausdinti (' proceso p2 ID: {} '. format (p2.pid)) # palaukite, kol procesai bus baigti p1.join () p2.join () # abu procesai baigė spausdinti ('Abu procesai baigti!') # patikrinkite, ar procesai yra gyvi spausdinti ('Procesas p1 yra gyvas: {}'. formatas (p1.is_alive ())) spausdinti ('Procesas p2 gyvas: {} '.formatas (p2.is_alive ())}

Rezultatas

Pagrindinio proceso ID: 18938

Procesą vykdančio darbuotojo ID1: 18939

Procesą vykdančio darbuotojo ID2: 18940

Proceso p1 ID: 18939

Proceso p2 ID: 18940

Abu procesai buvo baigti!

Procesas p1 yra gyvas: klaidingas

Procesas p2 yra gyvas: klaidingas

Pirmiau pateiktoje programoje atkreipkite dėmesį, kad tiek procesas p1, tiek p2 veikia nepriklausomai nuo jų individualių prisiminimų. Kai tik abu baigs vykdyti, programa bus nutraukta.

Taip pateksime į šio straipsnio apie daugiaprocesavimą „Python“ pabaigoje

kaip nustatyti klasės kelią Windows 10

Norėdami gauti išsamių žinių apie „Python“ kartu su įvairiomis jo programomis, galite tiesioginėms internetinėms treniruotėms, palaikančioms visą parą visą parą ir visą gyvenimą.

Turite mums klausimą? Paminėkite juos straipsnio komentarų skiltyje ir mes susisieksime su jumis.