Kas yra „mutthreading“ programoje „Python“ ir kaip to pasiekti?



Sužinokite, kas yra daugiafunkcinis darbas pitone. Jame taip pat paaiškinama, kaip sukurti daugiaslaidą giją, kaip sukurti gijas nesukuriant klasės, praplečiant gijų klasę ir jos neplatinant.

Laikas yra pats kritiškiausias veiksnys gyvenime. Dėl savo svarbos programavimo pasaulis pateikia įvairių gudrybių ir metodų, kurie žymiai padeda sumažinti laiko sąnaudas ir taip padidinti našumą. Vienas iš tokių būdų yra „Multithreading“ sistemoje „Python“, kuri yra viena iš svarbiausių nagrinėjamų sąvokų .

Čia pateikiama greita visų šiame straipsnyje aptariamų didžiųjų mokyklų santrauka:





Kas yra daugiafunkcinis darbas „Python“?
Kas yra gija?
Kas yra daugiagijis pythonas?
Kada „Python“ naudoti daugialypį gijimą?
Kaip pasiekti „Multithreading“ „Python“?
Kaip sukurti gijas „Python“?

Daugialypio sriegio naudojimo „Python“ pranašumai



Pirmiausia pabandykime suprasti daugiafunkcines užduotis, prieš pradėdami mokytis apie „Multithreading“ „Python“.

Kas yra daugiafunkcinis veiksmas „Python“?

Daugiafunkcinis darbas yra galimybė vienu metu atlikti kelias užduotis. Technine prasme daugiafunkcinis darbas reiškia operacinės sistemos gebėjimą vienu metu atlikti skirtingas užduotis. Pavyzdžiui , jūs ką nors atsisiunčiate į savo kompiuterį, taip pat klausotės dainų ir kartu žaidžiate žaidimus ir tt Visas šias užduotis sinchronizuoja ta pati OS. Tai ne kas kita, o daugiafunkcinis darbas, kuris ne tik padeda sutaupyti laiko, bet ir padidina produktyvumą.

OS yra dviejų tipų daugiafunkciniai darbai:



  • Procesinis
  • Siūlų pagrindu

Šiame straipsnyje sužinosite apie Siūlų pagrindu daugiafunkcinis arba Daugialypis sriegis .

Kas yra gija?

„threads-multithreading“ python-edurekaSiūlas iš esmės yra nepriklausomas vykdymo srautas. Vieną procesą gali sudaryti kelios gijos. Kiekviena programos gija atlieka tam tikrą užduotį. Pavyzdžiui, kai žaidi žaidimą, sakyk FIFA savo kompiuteryje, visas žaidimas yra vienas procesas , tačiau jis susideda iš kelių gijų, atsakingų už muzikos grojimą, vartotojo indėlio paėmimą, oponento sinchronišką valdymą ir kt. Tai yra atskiros gijos, atsakingos už šių skirtingų užduočių atlikimą toje pačioje programoje.

Kiekvienas procesas turi vieną giją, kuri visada vykdoma. Tai yra pagrindinis siūlas. Ši pagrindinė gija iš tikrųjų sukuria antrinės gijos objektus. Vaiko siūlą taip pat inicijuoja pagrindinis siūlas. Aš jums visiems šiame straipsnyje parodysiu toliau, kaip patikrinti dabartinę veikiančią giją.

Taigi, tikiuosi, kad jūs aiškiai supratote, kas yra gija. Toliau pažiūrėkime, kas yra „Multithreading“ „Python“.

Kada naudoti „Multithreading“ „Python“?

Daugialypis sriegis yra labai naudingas taupant laiką ir gerinant našumą, tačiau jo negalima pritaikyti visur.
Ankstesniame FIFA pavyzdyje muzikos gija yra nepriklausoma nuo gijos, į kurią įeis jūsų įvestis, o gija, į kurią įeisite, yra nepriklausoma nuo gijos, kuri paleidžia jūsų priešininką. Šios gijos veikia nepriklausomai, nes nėra tarpusavyje susijusios.

Todėl daugialypį sriegį galima naudoti tik tada, kai nėra priklausomybės tarp atskirų gijų.

Šis straipsnis toliau parodo, kaip galite pasiekti „Multithreading“ „Python“.

Kaip pasiekti „Multithreading“ „Python“?

Daugialypį Python galima pasiekti importuojant sriegimas modulis.

Prieš importuodami šį modulį turėsite jį įdiegti. Norėdami tai įdiegti „Anaconda“ aplinkoje, „Anaconda“ raginime vykdykite šią komandą:

conda install -c conda-forge tbb

Sėkmingai įdiegę, galite naudoti bet kurią iš šių komandų, kad importuotumėte sriegimo modulį:

importuoti sriegius iš sriegių importo *

Dabar, kai esate įdiegę sriegimo modulį, leiskite mums judėti pirmyn ir atlikti „Multithreading“ „Python“.

Kaip sukurti gijas „Python“?


„Python“ gijas galima sukurti trimis būdais:

  1. Nekuriant klasės
  2. Praplečiant siūlų klasę
  3. Neplatindama „Thread“ klasės

Nekuriant klasės

Kelią sriegį „Python“ galima atlikti ir nesukūrus klasės. Štai pavyzdys, parodantis tą patį:

Pavyzdys:

iš gijų importavimo * print (current_thread (). getName ()) def mt (): print ('Child Thread') vaikas = Thread (target = mt) child.start () print ('Vykdomas gijos pavadinimas:', current_thread ( ) .getName ())

Išvestis:

„MainThread Child Thread“ Vykdo gijos pavadinimą: MainThread

Pirmiau pateiktas išvestis rodo, kad pirmasis siūlomas siūlas yra pagrindinis. Tada ši pagrindinė gija sukuria antrinę giją, vykdančią funkciją, o tada pagrindinė gija vėl įvykdo galutinį spausdinimo teiginį.

sugeneruoti atsitiktinę eilutę java

Dabar pajudėkime į priekį ir pažiūrėkime, kaip atlikti „Multithreading“ Python, išplėsdami „Thread“ klasę.

Išplėsdami siūlų klasę:

Kai vaikų klasė sukuriama pratęsiant „Gijos“ klasę, vaikų klasė reiškia, kad nauja gija vykdo kokią nors užduotį. Pratęsiant „Gijos“ klasę, vaikų klasė gali nepaisyti tik dviejų metodų, t. Y. __Init __ () ir run () metodo. Negalima nepaisyti jokio kito metodo, išskyrus šiuos du metodus.

Štai pavyzdys, kaip išplėsti „Thread“ klasę, kad būtų sukurta gija:

Pavyzdys:

importuoti sriegį importo laiko klasės mithread (threading.Thread): def run (self): x x diapazone (7): print („Hi from child“) a = mythread () a.start () a.join () print („Iki pasimatymo“, current_thread (). GetName ())

Išvestis:
Sveiki nuo vaiko
Sveiki nuo vaiko
Sveiki nuo vaiko
Sveiki nuo vaiko
Sveiki nuo vaiko
Sveiki nuo vaiko
Sveiki nuo vaiko
Iki pasimatymo iš „MainThread“

Ankstesnis pavyzdys rodo, kad „myclass“ klasė paveldi „Thread“ klasę, o vaikų klasė, t. Y. „Myclass“ yra svarbesnė už paleidimo metodą. Pagal numatytuosius nustatymus pirmasis bet kurios klasės funkcijos parametras turi būti pats, kuris yra dabartinio objekto rodyklė. Išvestis rodo, kad antrinis siūlas vykdo run () metodą, o pagrindinis siūlas laukia, kol bus baigtas vaiko vykdymas. Taip yra dėl „join ()“ funkcijos, dėl kurios pagrindinis siūlas priverčia laukti, kol vaikas baigs.

Šis gijų kūrimo metodas yra labiausiai pageidaujamas metodas, nes jis yra standartinis metodas. Bet jei norite sukurti gijas nepaveldėdami ir neplatindami „Thread“ klasės, galite tai padaryti tokiu būdu.

Nepratęsdami siūlų klasės

Norėdami sukurti giją neišplėtę „Thread“ klasės, galite atlikti šiuos veiksmus:
Pavyzdys:

from threading import * class ex: def myfunc (self): #self required as first parametras klasės func x x diapazone (7): print ('Child') myobj = ex () thread1 = Thread (target = myobj. myfunc) thread1.start () thread1.join () print ('padaryta')

Išvestis:

Vaikas
Vaikas
Vaikas
Vaikas
Vaikas
Vaikas
Vaikas
padaryta

Antrinis siūlas vykdo „myfunc“, po kurio pagrindinis siūlas įvykdo paskutinį spausdinimo sakinį.

Siūlų naudojimo pranašumai

Daugialypis sriegimas turi daug privalumų, iš kurių keletas yra šie:

  • Geresnis išteklių panaudojimas
  • Supaprastina kodą
  • Leidžia vienu metu ir lygiagrečiai atlikti įvairias užduotis
  • Sumažina laiko sąnaudas ar reakcijos laiką, taip padidindamas našumą.

Čia yra pavyzdys, kaip patikrinti, kiek laiko užtrunka, kol kodas bus vykdomas naudojant daugialypį giją ir be jos:

 Pavyzdys: 
importo laikas def sqr (n): x x n: laikas. miego laikas (1) x% 2 def kubas (n): x x laikas n: laikas. miego laikas (1) x% 3 n = [1,2,3 , 4,5,6,7,8] s = laikas. Laikas () sqr (n) kubas (n) e = laikas. Laikas () spausdinimas (-ai)

Išvestis:

16.042309284210205

Aukščiau yra išvesties laikas, reikalingas programai vykdyti nenaudojant gijų. Dabar naudokime gijomis ir pažiūrėkime, kas nutiks tai pačiai programai:

Pavyzdys:

importuoti gijas iš sriegimo importuoti * importavimo laikas def sqr (n): x x n: time.sleep (1) print ('Likutis padalijus iš 2', x% 2) def kubas (n): x x n: time.sleep (1) print ('Likutis padalijus iš 3', x% 3) n = [1,2,3,4,5,6,7,8] pradžia = laikas.laikas () t1 = siūlas ( target = sqr, args = (n,)) t2 = siūlas (target = kubas, args = (n,)) t1.start () time.sleep (1) t2.start () t1.join () t2.join () pabaiga = laikas. laikas () spausdinti (pabaigos pradžia)
Išvestis: 9.040220737457275

Pirmiau pateiktas išvestis aiškiai parodo, kad laikas, per kurį mes naudojame gijas, yra daug mažesnis, palyginti su tuo pačiu programos vykdymo laiku nenaudojant gijų.

Tikiuosi, kad jums aiškios šiame straipsnyje aptariamos sąvokos, susijusios su „Multithreading“ sistemoje „Python“. Nepamirškite kuo daugiau praktikuoti, nes tai yra viena iš svarbiausių programavimo sąvokų.

Turite mums klausimą? Prašau tai paminėti šio tinklaraščio „Multithreading in Python“ komentarų skyriuje ir mes valios kuo greičiau susisiekti su jumis.

Norėdami gauti išsamių žinių apie „Python“ kartu su įvairiomis jo programomis, galite užsiregistruoti tiesiogiai su parą visą parą ir visą gyvenimą.