Jos olet juuri aloittanut Python ja haluaisi oppia lisää, ota DataCamp on Johdanto Data Science Python-kurssi.

Johdanto

Threading avulla voit olla eri osia prosessi suorittaa samanaikaisesti (Lähde: RealPython). Nämä eri osat ovat yleensä yksilöllisiä ja niillä on erillinen suoritusyksikkö, joka kuuluu samaan prosessiin., Prosessi on vain käynnissä oleva ohjelma, jossa on yksittäisiä yksiköitä, jotka voidaan suorittaa samanaikaisesti. Esimerkiksi, web-selain voi olla prosessi, sovellus käynnissä useita kameroita samanaikaisesti voi olla prosessi; video peli on toinen esimerkki prosessi.

Sisällä prosessi tulee käsite useita ketjuttaminen tai yleisesti tunnettu multi-ketjuttaminen, jossa useita säikeitä toimivat yhdessä yhteisen tavoitteen saavuttamiseksi. Tärkein etu kierteiden käyttö on, että sen avulla voit suorittaa ohjelman rinnakkain.,

katsotaanpa ymmärtää käsite threading avulla esimerkki. Kuvittele, että sinulla on sovellus, joka laskee ostarin parkkipaikalle tulevien ja sieltä poistuvien autojen määrän. Laitteessa on erilaisia kameroita, jotka valvovat keskuslaitteeseen yhdistävää sisään-ja uloskäyntiä. Jokaisella kameralla on algoritmi seurata autojen virtausta, joka kuuluu samaan prosessiin tai ohjelmaan. Jokainen kamera, yhdessä algoritmin kanssa, jolla sitä ajetaan, voisi kuitenkin olla osa erillistä lankaa., Ei vain, että, mutta jopa kehyksiä luetaan kamerasta ja algoritmi ennustaa kehyksiä voi myös olla kaksi erillistä lankaa.

Toinen esimerkki voisi olla videopeli jossa prosessi on suorittaa tehtäviä rinnakkain, kuten grafiikka, vuorovaikutuksen ja verkottumisen (kun pelaa multiplayer pelejä), koska se on herkkä aina. Ja tämän saavuttamiseksi, sen on hyödynnettävä käsitettä multi-threading, jossa jokainen lanka olisi vastuussa käynnissä kunkin riippumattoman ja yksittäisen tehtävän.,

langalla on suoritusvirtansa, mikä tarkoittaa, että prosessissa tapahtuu kerralla useita asioita.

on tärkeää huomata, että jokaisessa prosessissa on vähintään yksi säie, ja sitä kutsutaan main thread. Jos ohjelmassasi ei ole määriteltyä lankaa, niin siinä on ainakin pääkierre eli itse prosessi.

Jos et katso yllä oleva kuva, on prosessi, joka koostuu lanka, joka koostuu globaalien muuttujien ja kolme eri kierteet t1, t2, ja t3. Jokaisella langalla on paikalliset muuttujat ja koodin suorittamisen virta., Langat yleensä jakaa resursseja prosessin, kuten käytettävissä olevat resurssit lanka on myös jaettu joukossa kolme kierteet t1, t2, ja t3. Kaikilla kierteillä on pääsy maailmanlaajuisiin muuttujiin samalla kun niillä on omat paikalliset muuttujansa.,

On olemassa erilaisia kierteet:

  • Kernel thread
  • Käyttäjä lanka
  • Yhdistelmä ytimen ja käyttäjän lanka

Nyt katsotaanpa joitakin etuja, joiden ketjuttaminen teidän program:

  • Multi-ketjuttaminen mahdollistaa ohjelman nopeuttamaan täytäntöönpanoa edellyttäen, että se on useita Suorittimia.

  • Sen avulla voit myös suorittaa muita tehtäviä, kun taas I/O-toiminnot suoritetaan avulla useita säikeitä tai jopa punainen lanka, yhdessä yhden säikeen., Esimerkiksi nopeus, jolla kehykset kamera on lukea ja päätellä algoritmi käsittelee eri kierteet. Näin ollen algoritmi ei tarvitse odottaa runko voidaan syöttää, ja runko lukemisen osa ei tarvitse odottaa, että algoritmin suorittaminen loppuun voi lukea seuraavan kehyksen.

  • Säikeitä samassa prosessissa voi jakaa muistia ja resursseja lanka.,

Haasteisiin Ketjuttaminen:

  • Muista, että Python toimii perustuu CPython toteutus, joka rajoittaa vain yksi säie ajaa kerrallaan, siten, ketjuttaminen voi nopeuttaa kaikki tehtävät. Ja olennainen syy tähän on Global Interpreter Lock (GIL).

    Jos haluat oppia GIL, sitten voit vapaasti tarkistaa tämä opetusohjelma.

  • Jos etsit nopeuttaa CPU intensiivinen tehtävä, sitten ketjuttaminen voi olla paras ratkaisu sinulle. Tällöin monikäsittely katsotaan hyödylliseksi.,

  • suorita ohjelma koostuu eri kierteet, se tarvitsee vaihtaa nopeasti eri kierteet, ja siksi aikataulujen on pidettävä huolta ohjelmissa, joissa on paljon kierteet.

  • Resurssien jakaminen voi myös olla ongelma, koska kaikki langat jakaa samoja resursseja ja muistia globaaleja muuttujia. Näin ollen yhdellä langalla suoritetut operaatiot voivat aiheuttaa muistivirheen toiselle langalle, tai toinen lanka ei välttämättä saa muistia suorittamaan tehtäväänsä.,

Ketjuttaminen Python

  • Python, ketjuttaminen moduuli on sisäänrakennettu moduuli, joka tunnetaan threading ja voidaan suoraan tuoda.

  • koska lähes kaikki Pythonissa esitetään objektina, threading on myös objekti Pythonissa. Lanka pystyy

    • Jolla on tietoa,
    • Tallennetut tietorakenteet, kuten sanakirjoja, luetteloita, asetetaan, jne.
    • voidaan siirtää parametrina funktiolle.
  • lanka voidaan suorittaa myös prosessina.,

  • lanka Python voi olla eri valtioiden, kuten:

    • Odota,
    • Lukittu.

Let ’ s now learn how you can implement threading in Python.

Lanka moduuli Python3

Huomaa, että Python3 on taaksepäin yhteensopiva thread moduuli, joka on Python2.7. Python3: ssa sen voi tuoda nimellä _thread moduuli. Joten, otetaanpa esimerkki ja ymmärtää _thread moduuli.,

import _thread #thread module importedimport time #time module

– Anna on määrittää funktion, jota kutsutaan thread_delay, joka ottaa kaksi parametria tulona, eli nimi lanka ja viive. Sisällä tätä toimintoa, sinun tulee:

  • Määrittää laskurin nolla,
  • Sitten voit silmukan kanssa, kun silmukka, joka on juossut kolme kertaa,
  • while-silmukan Sisällä, voit laittaa time.sleep() lisää viive, viive on hyödyllistä ymmärtää suorittamisen kierteen., Tämä viive on sekunteina,
  • Sitten increment counter 1,
  • onko oman säikeen suoritus on menossa sujuvasti, voit tulostaa nimi lanka ja ajan, jolloin lanka on toteutettu.
def thread_delay(thread_name, delay): count = 0 while count < 3: time.sleep(delay) count += 1 print(thread_name, '-------->', time.time())

Nyt voit lisätä lanka toiminnallisuutta edellä toiminto tai ajaa edellä toiminto lanka, voit käyttää start_new_thread menetelmä, joka on sisällä _thread module.

katsotaanpa docstring, että start_new_thread menetelmä.,

?_thread.start_new_thread

katsotaanpa kulkea toiminto thread_delay ilman sulkuja ja kaksi argumenttia, eli kierre nimi ja viive (visualisoida lanka toteuttamista, koska se on erittäin nopea).

_thread.start_new_thread(thread_delay, ('t1', 1))_thread.start_new_thread(thread_delay, ('t2', 3))

edellä lähtö, voit nähdä, että lanka t1 alkaa suorittamista ensin., Samaan aikaan, lanka t2 odottaa koska siellä on 3 sekunnin viive, ja niin pian kuin, että viive on valmis, lanka t2 suoritetaan, ja myös viive lanka t1 on vain 1 sekunti.

katsotaanpa nyt muuttaa viive t2 5 sekuntia, joka alkaa t2 jälkeen t1 olisi päättynyt täytäntöönpanosta koska t1 kestää vain 3 sekuntia loppuun sen toteuttamista.,

_thread.start_new_thread(thread_delay, ('t1', 1))_thread.start_new_thread(thread_delay, ('t2', 5))

Täytäntöönpanon ketjuttaminen käyttää Ketjuttaminen moduuli

käytetään samaa esimerkkiä kuin voit käyttää edellä, mutta tällä kertaa sinun tulee käyttää threading moduuli sijasta _thread moduuli.

import threadingimport time
def thread_delay(thread_name, delay): count = 0 while count < 3: time.sleep(delay) count += 1 print(thread_name, '-------->', time.time())

Sisälle threading moduuli Thread luokka, joka on samanlainen henki start_new_thread toiminto _thread moduuli.,

katsotaanpa docstring on Thread luokka, joka vie useita parametreja, kuten ryhmä, kohde (kuten toiminta), args, jne.

?threading.Thread

Lanka luokan rakentaja, voit siirtää kohde toiminto thread_delay ja väitteet, että toiminto.,

t1 = threading.Thread(target=thread_delay, args=('t1', 1))t2 = threading.Thread(target=thread_delay, args=('t2', 3))

Vuonna ketjuttaminen moduuli, jotta ajaa tai suorittaa lanka, voit käyttää start() menetelmä, joka yksinkertaisesti vastuussa käynnissä lanka.

?t1.start
t1.start()t2.start()

Voit myös käyttää join menetelmä, mikä tarkoittaa, että odota, kunnes kaikki lanka suoritus on täydellinen., Joten mitä tahansa koodia olet kirjoittanut jälkeen join menetelmä suoritetaan vasta kun nämä kierteet ovat päättyneet.

?t1.join
t1.start()t2.start()t1.join()t2.join()print("Thread execution is complete!")

Nyt laskea tilavuus kuution ja neliön käyttäen ketjuttaminen käsite, joka on melko suoraan eteenpäin.

def volume_cube(a): print ("Volume of Cube:", a*a*a)
def volume_square(a): print ("Volume of Square:", a*a)
t1 = threading.Thread(target=volume_cube, args=(2))t2 = threading.Thread(target=volume_square, args=(3))
t1.start()t2.start()t1.join()t2.join()print("Thread execution is complete!")

Odota, mitä? Heti kun suoritit käynnistysmenetelmän, se johti virheeseen., Tämä on koska args parametri odottaa monikko, ja koska volume_cube ja volume_square odottaa vain yksi parametri, siten, sinun täytyy laittaa pilkku args parametrin määrittämisen jälkeen ensimmäinen argumentti toimintoja.

t1 = threading.Thread(target=volume_cube, args=(2,))t2 = threading.Thread(target=volume_square, args=(3,))
t1.start()t2.start()t1.join()t2.join()print("Thread execution is complete!")
Volume of Cube: 8Volume of Square: 9Thread execution is complete!

katsotaanpa nyt oppia käyttämään ketjuttaminen kuin alaluokka.,

Ketjuttaminen kuin sub-class

tässä osiossa, voit oppia, miten luoda sub-luokka thread luokka, joka on saatavilla sisällä threading-moduuli, ja sitten luoda lanka tapauksissa t1 ja t2 ulos luokasta.

käyttäisit samaa thread_delay funktiota tässäkin.

Nyt ymmärtää edellä koodi askel askeleelta:

  • määritelty luokka DataCampThread, ja luokan väite, olet läpäissyt threading.Thread luokka., Syy siihen on, että haluat luoda alaluokan ketjutusmoduulista. Näin voit käyttää kaikkia menetelmiä, jotka ovat saatavilla threading.Thread – luokassa, joka muistuttaa perinnön käsitettä.

  • Seuraavaksi sinun määritelty init-menetelmä DataCampThread luokan ja kulunut toiminto yhdessä viivytystä. Init on rakentaja samanlainen parametrit välitetään threading.Thread luokka, täällä olisi ohimennen DataCampThread luokka.,

  • Sitten alustaa init-menetelmän tärkein ketjuttaminen.Lanka luokka ja sitten rinnastaa nimi ja viive.

  • Seuraavaksi sinun määritellä run menetelmä, muista, täällä voit määritellä start menetelmä, joka pohjimmiltaan alla huppu puhelut run menetelmä. Koska olet perinyt pääluokan, voit tehdä muutoksia run – menetelmään., Näin ollen, kun soitat start menetelmä, mitä muutoksia sinun tulee tehdä run menetelmä näkyy nyt.

Johtopäätös

Onnittelut viimeistely opetusohjelma.

Tämä opetusohjelma oli perusluonteinen johdatus kiertelyyn Pythonissa. Pujottelu on kuitenkin hyvin laaja ja elintärkeä aihe, ja jotkin käsitteet ovat saattaneet jäädä tutkimatta. Voit vapaasti tarkastella enemmän ketjutus menetelmiä, kuten aktiivinen määrä, nykyinen lanka, jne.

Jos haluat oppia lisää, tutustu myös Pythonin Lankapohjaiseen Parallelismiin.,

Jos olet juuri aloittamassa Pythonissa ja haluaisit oppia lisää, ota Datacampin Johdatus Datatieteeseen Python-kurssilla.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *