Mitä on mutthreading Pythonissa ja miten se saavutetaan?



Opi, mitä pythonissa on moniajo. Siinä selitetään myös monisäikeinen miten ketjut luodaan luomatta luokkaa, laajentamalla Thread-luokkaa ja laajentamatta sitä.

Aika on elämän kriittisin tekijä. Ohjelmoinnin maailma tarjoaa tärkeydestään johtuen erilaisia ​​temppuja ja tekniikoita, jotka auttavat merkittävästi vähentämään ajankulutusta ja parantamaan siten suorituskykyä. Yksi tällainen lähestymistapa on Multithreading in Python, joka on yksi tärkeimmistä käsitteistä .

Tässä on lyhyt yhteenveto kaikista tämän artikkelin käsittelemistä pääaineista:





Mikä on moniajo Pythonissa?
Mikä on ketju?
Mitä monisäikeisyys on pythonissa?
Milloin käyttää monisäikeisyyttä Pythonissa?
Kuinka saavuttaa monisäikeisyys Pythonissa?
Kuinka luoda ketjuja Pythonissa?

Monisäikeisen käytön edut Pythonissa



Ensinnäkin, yritetään ensin ymmärtää moniajo ennen kuin alamme oppia Multithreadingista Pythonissa.

Mitä on moniajo Pythonissa?

Moniajo on yleensä kyky suorittaa useita tehtäviä samanaikaisesti. Teknisesti monitehtävällä tarkoitetaan käyttöjärjestelmän kykyä suorittaa erilaisia ​​tehtäviä samanaikaisesti. Esimerkiksi , lataat jotain tietokoneellesi sekä kuuntelet kappaleita ja pelaat samanaikaisesti peliä jne. Kaikki nämä tehtävät suorittaa sama käyttöjärjestelmä synkronoituna. Tämä ei ole muuta kuin moniajo, joka paitsi säästää aikaa myös lisää tuottavuutta.

Käyttöjärjestelmässä on kahta tyyppiä moniajoa:



  • Prosessipohjainen
  • Lankapohjainen

Tässä artikkelissa opit Lankapohjainen moniajo tai Monisäikeinen .

Mikä on ketju?

threads-multithreading python-edurekassaLanka on pohjimmiltaan riippumaton suoritusvirta. Yksi prosessi voi koostua useista säikeistä. Jokainen ohjelman ketju suorittaa tietyn tehtävän. Esimerkiksi, kun pelaat peliä sano FIFA tietokoneellasi, peli kokonaisuutena on yksi prosessi , mutta se koostuu useista säikeistä, jotka vastaavat musiikin soittamisesta, käyttäjän panoksen saamisesta, vastustajan synkronoinnista jne. Kaikki nämä ovat erillisiä säikeitä, jotka vastaavat näiden eri tehtävien suorittamisesta samassa ohjelmassa.

Jokaisessa prosessissa on yksi säie, joka on aina käynnissä. Tämä on päälanka. Tämä päälanka luo itse asiassa alilankaobjektit. Lapsilanka aloitetaan myös pääkierteellä. Näytän teille kaikille edelleen tässä artikkelissa, kuinka tarkistaa nykyinen käynnissä oleva säie.

Joten tällä toivon, että olet ymmärtänyt selvästi, mikä on lanka. Katsotaanpa, mitä on Multithreading Pythonissa.

Milloin käyttää Multithreadingia Pythonissa?

Monisäikeisyys on erittäin hyödyllinen ajan säästämiseksi ja suorituskyvyn parantamiseksi, mutta sitä ei voida soveltaa kaikkialla.
Aikaisemmassa FIFA-esimerkissä musiikkilanka on riippumaton syötteesi ottavasta säikeestä ja syötteesi ottava säie on riippumaton vastustajaasi johtavasta langasta. Nämä ketjut toimivat itsenäisesti, koska ne eivät ole toisistaan ​​riippuvaisia.

Siksi monisäikeisyyttä voidaan käyttää vain, kun riippuvuutta yksittäisten säikeiden välillä ei ole.

Tämä artikkeli osoittaa edelleen, kuinka voit saavuttaa monisäikeisyyden Pythonissa.

Kuinka saavuttaa monisäikeisyys Pythonissa?

Monisäikeisyys Pythonissa voidaan saavuttaa tuomalla pujottaminen moduuli.

Ennen tämän moduulin tuomista sinun on asennettava se. Asenna tämä anaconda-ympäristöön suorittamalla seuraava komento anaconda-kehotteessasi:

conda install -c conda-forge tbb

Asennuksen onnistumisen jälkeen voit käyttää mitä tahansa seuraavista komennoista ketjutusmoduulin tuomiseen:

tuo ketjuttaminen langoituksesta tuonti *

Nyt, kun ketjutusmoduuli on asennettu, siirrymme eteenpäin ja teemme Multithreading Pythonissa.

Kuinka luoda ketjuja Pythonissa?


Pythonin ketjut voidaan luoda kolmella tavalla:

  1. Luomatta luokkaa
  2. Laajentamalla Thread-luokkaa
  3. Laajentamatta Thread-luokkaa

Luomatta luokkaa

Monisäikeisyys Pythonissa voidaan suorittaa luomatta myös luokkaa. Tässä on esimerkki saman osoittamiseksi:

Esimerkki:

threading-tuonnista * print (current_thread (). getName ()) def mt (): print ('Child Thread') child = Thread (target = mt) child.start () print ('Suoritetaan langan nimi:', current_thread ( ) .getName ())

Tuotos:

MainThread Child Thread Suoritetaan langan nimi: MainThread

Yllä oleva lähtö osoittaa, että ensimmäinen lanka, joka on läsnä, on päälanka. Tämä päälanka luo sitten lapsilangan, joka suorittaa toiminnon, ja sitten päälanka suorittaa lopullisen tuloslausekkeen uudelleen.

Siirrytään nyt eteenpäin ja katsotaan kuinka tehdä monisäikeisyys pythonissa laajentamalla Thread-luokkaa.

Laajentamalla Thread-luokkaa:

Kun lapsiluokka luodaan laajentamalla Säike-luokkaa, lapsiluokka edustaa, että uusi ketju suorittaa jotain tehtävää. Lankaluokkaa laajennettaessa alaluokka voi ohittaa vain kaksi menetelmää, eli __init __ () -menetelmän ja run () -menetelmän. Mikään muu menetelmä ei voi ohittaa muuta kuin nämä kaksi menetelmää.

Tässä on esimerkki Thread-luokan laajentamisesta luomaan ketju:

Esimerkki:

tuonti säikeiden tuonti aikaluokka myytti (säikeet. lanka): def ajaa (itse): x: lle alueella (7): tulosta ('Hi from child') a = mythread () a.start () a.join () print ('Hei!', Current_thread (). GetName ())

Tuotos:
Hei lapselta
Hei lapselta
Hei lapselta
Hei lapselta
Hei lapselta
Hei lapselta
Hei lapselta
Hei, MainThreadilta

Yllä oleva esimerkki osoittaa, että luokan myclass perii säieluokka ja lapsiluokka eli myclass ohittaa suoritustavan. Oletusarvoisesti minkä tahansa luokan toiminnon ensimmäisen parametrin on oltava itse, joka on nykyisen objektin osoitin. Lähtö osoittaa, että lapsilanka suorittaa run () -menetelmän ja päälanka odottaa lapsen suorituksen päättymistä. Tämä johtuu join () -toiminnosta, joka saa päälangan odottamaan lapsen loppua.

Tämä ketjujen luomismenetelmä on suosituin menetelmä, koska se on vakiomenetelmä. Mutta jos haluat luoda säikeitä perimättä tai laajentamatta Säie-luokkaa, voit tehdä sen seuraavalla tavalla.

mitä Linux-järjestelmänvalvoja tekee

Laajentamatta Thread-luokkaa

Voit luoda ketjun laajentamatta Lanka-luokkaa seuraavasti:
Esimerkki:

ketjutuksesta tuonti * luokka ex: def myfunc (self): # itse välttämätön ensimmäisen parametrina luokan func alueella x (7) x: print ('lapsi') myobj = ex () thread1 = lanka (kohde = myobj. myfunc) thread1.start () thread1.join () print ('valmis')

Tuotos:

Lapsi
Lapsi
Lapsi
Lapsi
Lapsi
Lapsi
Lapsi
tehty

Lapsilanka suorittaa myfunc-toiminnon, jonka jälkeen päälanka suorittaa viimeisen tulosteen.

Kierteen käytön edut

Monisäikeellä on monia etuja, joista osa on seuraavia:

  • Resurssien parempi käyttö
  • Yksinkertaistaa koodia
  • Sallii eri tehtävien samanaikaisen ja rinnakkaisen esiintymisen
  • Vähentää ajankulutusta tai vasteaikaa ja lisää siten suorituskykyä.

Tässä on esimerkki sen tarkistamiseksi, kuinka kauan kestää koodin suorittaminen pythonissa monisäikeisyyden kanssa tai ilman sitä:

 Esimerkki: 
tuontiaika def sqr (n): x: lle n: time.sleep (1) x% 2 def cube (n): x: lle n: time.sleep (1) x% 3 n = [1,2,3 , 4,5,6,7,8] s = aika.aika () sqr (n) kuutio (n) e = aika.aika () tulosteet

Tuotos:

16.042309284210205

Edellä on lähtöaika, joka kuluu ohjelman suorittamiseen ilman säikeitä. Anna nyt käyttää säikeitä ja nähdä, mitä samalle ohjelmalle tapahtuu:

Esimerkki:

tuonti ketjuttaminen langoituksesta tuonti * tuontiaika def sqr (n): x: lle n: ssä: time.sleep (1) print ('Jäännös 2: lla jakamisen jälkeen', x% 2) def-kuutio (n): x: lle n: ssä: time.sleep (1) print ('Jäännös 3: lla jaon jälkeen', x% 3) n = [1,2,3,4,5,6,7,8] alku = aika.aika () t1 = lanka ( kohde = sqr, args = (n,)) t2 = lanka (kohde = kuutio, args = (n,)) t1.start () time.sleep (1) t2.start () t1.liity () t2.liitä () loppu = aika. aika () tulosta (loppu-alku)
Tuotos: 9.040220737457275

Yllä oleva tulos osoittaa selvästi, että säikeiden käyttämiseen kuluva aika on paljon lyhyempi kuin aika, joka kuluu saman ohjelman suorittamiseen ilman säikeitä.

Toivon, että olet selvillä tämän artikkelin käsitteistä, jotka liittyvät Pythonin Multithreadingiin. Harjoittele mahdollisimman paljon, koska tämä on yksi tärkeimmistä ohjelmoinnissa käytetyistä käsitteistä.

Onko sinulla kysymys meille? Mainitse se tämän 'Multithreading in Python' -blogin kommenttiosassa ja me tahtoa ota yhteyttä mahdollisimman pian.

Saadaksesi syvällistä tietoa Pythonista sen eri sovellusten kanssa, voit ilmoittautua livenä 24/7 -tuella ja käyttöikä.