Što je međusobno čitanje u Pythonu i kako to postići?

Saznajte što je multitasking u pythonu. Također objašnjava multithreading kako stvoriti niti bez stvaranja klase, proširujući klasu Thread i ne proširujući je.

Vrijeme je najvažniji faktor u životu. Zahvaljujući svojoj važnosti, svijet programiranja nudi razne trikove i tehnike koji vam značajno pomažu u smanjenju potrošnje vremena, a time i povećanju performansi. Jedan od takvih pristupa je Multithreading u Pythonu, što je jedan od najvažnijih pojmova obuhvaćenih u .



Evo kratkog sažetka svih smjerova obuhvaćenih ovim člankom:



Što je višezadaćnost u Pythonu?
Što je nit?
Što je multithreading u pythonu?
Kada koristiti multithreading u Pythonu?
Kako postići Multithreading u Pythonu?
Kako stvoriti niti u Pythonu?

Prednosti upotrebe multithreadinga u Pythonu



Za početak, prvo pokušajmo razumjeti multitasking prije nego što počnemo učiti o Multithreadingu u Pythonu.

Što je multitasking u Pythonu?

Višezadaćnost je općenito sposobnost istodobnog izvođenja više zadataka. U tehničkom smislu, multitasking se odnosi na sposobnost operativnog sustava da istovremeno izvršava različite zadatke. Na primjer , preuzimate nešto s računala, slušate pjesme i istodobno igrate igru ​​itd. Sve te zadatke sinkronizira isti OS. Ovo nije ništa drugo nego multitasking koji vam ne samo pomaže uštedjeti vrijeme već i povećava produktivnost.

Postoje dvije vrste multitaskinga u OS-u:



  • Na temelju procesa
  • Temeljeno na niti

padajući izbornik u angularjs

U ovom ćete članku učiti o Temeljeno na niti multitasking ili Višenitnost .

Što je nit?

niti-multithreading u python-edurekaNit je u osnovi an neovisna tijek izvršenja. Jedan postupak može se sastojati od više niti. Svaka nit u programu izvršava određeni zadatak. Na primjer, kada igrate igru ​​recite FIFA na računalu, igra u cjelini je jedan proces , ali sastoji se od nekoliko niti odgovornih za reprodukciju glazbe, uzimanje podataka od korisnika, sinkrono pokretanje protivnika itd. Sve su to zasebne niti odgovorne za izvršavanje ovih različitih zadataka u istom programu.

Svaki postupak ima jednu nit koja je uvijek pokrenuta. Ovo je glavna nit. Ova glavna nit zapravo stvara podređene objekte niti. Podređena nit također je pokrenuta glavnom niti. Dalje ću vam u ovom članku pokazati kako provjeriti trenutnu pokrenutu nit.

Dakle, nadam se da ste s ovim jasno razumjeli što je nit. Krenimo dalje, pogledajmo što je Multithreading u Pythonu.

Kada koristiti Multithreading u Pythonu?

Multithreading je vrlo koristan za uštedu vremena i poboljšanje performansi, ali se ne može primijeniti svugdje.
U prethodnom primjeru FIFA-e, glazbena nit neovisna je o niti koja uzima vaš ulaz, a nit koja uzima vaš ulaz neovisna je o niti koja pokreće vašeg protivnika. Te niti rade neovisno jer nisu međusobno ovisne.

Stoga se višenitnost može koristiti samo kada ne postoji ovisnost između pojedinih niti.

Ovaj članak dalje pokazuje kako možete postići Multithreading u Pythonu.

Kako postići Multithreading u Pythonu?

Višenitnost u Pythonu može se postići uvozom datoteke navoja modul.

Prije uvoza ovog modula, morat ćete ga instalirati. Da biste ovo instalirali u svoje okruženje anaconda, na naredbi anaconda izvršite sljedeću naredbu:

conda install -c conda-forge tbb

Nakon uspješno instalirane, možete upotrijebiti bilo koju od sljedećih naredbi za uvoz modula za navoja:

uvoz navoja iz navoja uvoz *

Sad kad ste instalirali thread thread modul, krenimo dalje i radimo Multithreading u Pythonu.

Kako stvoriti niti u Pythonu?


Teme u Pythonu mogu se stvoriti na tri načina:

  1. Bez stvaranja klase
  2. Proširivanjem klase Thread
  3. Bez proširenja klase Thread

Bez stvaranja klase

Multithreading u Pythonu može se postići i bez stvaranja klase. Evo primjera da se to pokaže:

Primjer:

iz navoja uvoz * print (current_thread (). getName ()) def mt (): print ('Dijete nit') child = Nit (target = mt) child.start () print ('Izvršenje imena niti:', current_thread ( ) .getName ())

Izlaz:

Nadređena nit MainThread Izvršenje naziva niti: MainThread

Gornji izlaz pokazuje da je prva nit koja je prisutna glavna nit. Zatim ova glavna nit stvara podređenu nit koja izvršava funkciju, a zatim glavni nit ponovno izvršava završni ispis.

Sada krenimo naprijed i pogledajte kako napraviti Multithreading u pythonu proširujući klasu Thread.

Proširivanjem klase Thread:

Kada se podređena klasa kreira proširenjem klase Thread, podređena klasa predstavlja da nova nit izvršava neki zadatak. Kada proširuje klasu Thread, podređena klasa može nadjačati samo dvije metode, tj. Metodu __init __ () i metodu run (). Nijedna druga metoda ne može se nadjačati osim ove dvije metode.

Evo primjera kako proširiti klasu Thread da bi se stvorila nit:

Primjer:

uvoz navoja uvoz vremenske klase mitret (navoja.Nit): def run (self): za x u rasponu (7): print ('Hi from child') a = mythread () a.start () a.join () print ('Doviđenja od', current_thread (). GetName ())

Izlaz:
Bok od djeteta
Bok od djeteta
Bok od djeteta
Bok od djeteta
Bok od djeteta
Bok od djeteta
Bok od djeteta
Ćao od MainThreada

Gornji primjer pokazuje da klasa myclass nasljeđuje klasu Thread, a podređena klasa, tj. Myclass nadjačava metodu izvođenja. Prema zadanim postavkama, prvi parametar bilo koje funkcije klase mora biti self koji je pokazivač na trenutni objekt. Izlaz pokazuje da podređena nit izvršava metodu run (), a glavna nit čeka izvršenje podređene jedinice. To je zbog funkcije join () koja čini da glavna nit čeka dijete da završi.

Ova metoda stvaranja niti je najpoželjnija metoda jer je to standardna metoda. Ali u slučaju da želite stvoriti niti bez nasljeđivanja ili proširivanja klase Thread, to možete učiniti na sljedeći način.

duboko i plitko kloniranje u javi

Bez klase Extending Thread

Da biste stvorili nit bez proširivanja klase Thread, možete učiniti sljedeće:
Primjer:

iz uvoja niti * klasa ex: def myfunc (self): # potreban sam kao prvi parametar u funkciji klase za x u rasponu (7): print ('Dijete') myobj = ex () thread1 = Thread (target = myobj. myfunc) thread1.start () thread1.join () print ('gotovo')

Izlaz:

Dijete
Dijete
Dijete
Dijete
Dijete
Dijete
Dijete
gotovo

Podređena nit izvršava myfunc nakon čega glavna nit izvršava zadnji ispisni izraz.

Prednosti korištenja navoja

Multithreading ima brojne prednosti, od kojih su neke sljedeće:

  • Bolje korištenje resursa
  • Pojednostavljuje kôd
  • Omogućuje istodobnu i paralelnu pojavu različitih zadataka
  • Smanjuje potrošnju vremena ili vrijeme odziva, čime se povećavaju performanse.

Evo primjera za provjeru koliko vremena treba izvršiti kod sa i bez multithreadinga u pythonu:

 Primjer: 
vrijeme uvoza def sqr (n): za x u n: vrijeme.spavanje (1) x% 2 def kocke (n): za x u n: vrijeme.spavanje (1) x% 3 n = [1,2,3 , 4,5,6,7,8] s = vrijeme.vrijeme () sqr (n) kocka (n) e = vrijeme.vrijeme () ispis (i)

Izlaz:

16,042309284210205

Gore je navedeno izlazno vrijeme potrebno za izvršavanje programa bez korištenja niti. Sada ćemo se poslužiti nitima i vidjeti što će se dogoditi s istim programom:

Primjer:

uvoz navoja iz navoja uvoz * vrijeme uvoza def sqr (n): za x u n: time.sleep (1) print ('Ostatak nakon dijeljenja sa 2', x% 2) def kocka (n): za x u n: time.sleep (1) print ('Ostatak nakon dijeljenja sa 3', x% 3) n = [1,2,3,4,5,6,7,8] start = time.time () t1 = Tema ( target = sqr, args = (n,)) t2 = Thread (target = cube, args = (n,)) t1.start () time.sleep (1) t2.start () t1.join () t2.join () kraj = vrijeme.vrijeme () ispis (kraj-početak)
Izlaz: 9,040220737457275

Gornji izlaz jasno pokazuje da je vrijeme potrebno za korištenje niti puno manje u odnosu na vrijeme potrebno za izvršavanje istog programa bez korištenja niti.

Nadam se da su vam jasni pojmovi obuhvaćeni ovim člankom koji se odnose na Multithreading u Pythonu. Obavezno vježbajte što je više moguće jer je ovo jedan od najvažnijih pojmova koji se koristi u programiranju.

Imate pitanje za nas? Molimo vas da to spominjete u odjeljku za komentare ovog bloga 'Multithreading in Python', a mi smo htjeti javiti vam se što prije.

Da biste stekli detaljno znanje o Pythonu, zajedno s raznim aplikacijama, možete se prijaviti uživo s 24/7 podrškom i doživotnim pristupom.