Eksempel nr. 1: Python Thread Script Execution Bruker timeout i Acquire () Lås.
Vi vil diskutere bruken av "Acquire ()" -metoden for låsen i dette eksemplet. "Acquire ()" -metoden kan brukes til å låse. Det kan ikke gjøres flere anstrengelser for å oppnå dette før låsen er utgitt når en tråd har låst låsen. "Acquire ()" -metoden kan brukes til å sikre en lås. Når en tråd har sikret låsen, kan det ikke gjøres ytterligere forsøk på å gjøre det før låsen er utgitt. Alternativet "timeout" vil også bli brukt i denne forekomsten av metoden "Acquire ()" for å spesifisere hvor lenge den anropstråden vil bli forsinket hvis en annen operasjon allerede prøver å få låsen. Hvis trådens potensielle verdi er 1, som er 1, vil tråden bli forsinket på ubestemt tid til den anskaffer låsen. Her brukte vi dette for å bestemme hvor lang tid en tråd vil søke etter en lås.
La oss begynne å implementere skriptet ved å bruke "Spyder" -verktøyet for å implementere koden. Vi skal importere lås og tråd fra Python Threading Library først. Tråder brukes i en Python -prosess for å utføre kodeutførelse. Hvert program har en tråd som standard, men vi må kanskje produsere flere tråder hvis vi ønsker å gjøre flere prosesser samtidig. Søvnmodulen importeres deretter. "Sleep ()" -metoden i Pythons tidsmodul brukes til å pause utførelsen av et program for en forhåndsbestemt tid. Dette antyder at programmet er midlertidig suspendert før det utføres automatisk etter en forhåndsbestemt periode. Deretter brukes "lås ()" -metoden. Deretter definerer vi i den følgende linjen en funksjon med navnet “Func1” og passerer variabelen “Lås” i parentesene.
"IF" -uttalelsen muliggjør utførelse av en uttalelse eller et sett med uttalelser under spesifikke omstendigheter basert på resultatet av et uttrykk. Vi bruker metoden “Acquire ()” på låsobjektet inne i "hvis" -tilstanden slik at tråden kontinuerlig vil vente på låsen. Vi passerer en timeout som en av dens parametere og setter den til “10” i parentesene til “Acquire ()” -funksjonen. Nå, hvis uttalelsen tilfredsstiller kravet, bruker vi "Print ()" -funksjonen, og gir uttalelsen “Tråd 2: Done” i parentesene, og så kaller vi Release () -metoden på en låsobjektmodul. Hvis låsen er låst, vil denne prosessen reagere etter å ha vendt den tilbake til sin ulåste tilstand.
I tillegg kan denne metoden kalles av hvilken som helst tråd. Det er tillatt for en av trådene som allerede venter på å skaffe seg holdet for å henge på den til denne funksjonen heter. Vi skriver nå ut uttalelsen “Tråd 1: timeout” hvis tilstanden ikke er oppfylt. Vi vil nå bygge en ny funksjon med navnet “Func” og parameterlåsen på følgende linje. Deretter bruker vi Låsobjekt. I den følgende linjen kaller vi deretter "print ()" -funksjonen og gir utsagnet "tråd 1: ferdig" før vi bruker "release ()" -metoden med låsen.
Vi vil nå lage en tråd og ringe trådens metoder ved å ringe trådobjektet. Vi brukte en tråd og satte “Target = func” inne i den, og passerte argumentet “Lock”. Deretter lagret vi denne tråden i en variabel kalt “Tråd1.”I neste linje kalte vi“ Func1 ”med tråden og passerte argumentet“ Lock ”, ved å bruke“ Tråd1.start () ”for å starte tråden. Vi gjorde det samme for tråd2. "Join ()" -metoden brukes deretter til å vente på utførelse av tråd. Dermed har vi to tråder, som hver kaller to distinkte rutiner. Tidsavbruddet for den andre tråden er “10” sekunder, mens den første tråden fungerer i “2” sekunder.
Utgangsdisplayet viser nå at tråd 1 gjøres først siden den ble generert først og kunne få tilgang til låsen og fullføre utførelsen. Tråd 2 er ferdig fordi tidsavbruddet ble satt til “10” sekunder, som det kan sees.
Eksempel nr. 2: Bruke Pythons trådlås i en løpstilstand
Vi bruker Python trådlås i en løpstilstand i dette eksemplet. En løpstilstand oppstår når to tråder ser på et delt variabel samtidig øyeblikk. De første og andre trådene fikk samme resultat fra den opprinnelige trådens konstante. Deretter prøver de to trådene å endre den vanlige verdien av den avhengige variabelen. Dataene fra tråden som legger til den delte variabellisten opprettholdes fordi den sletter verdien som den foregående tråden skrev.
La oss begynne å implementere koden. I den første linjen importerer vi låsemodulen fra trådmodulen. Og i følgende linje importerer vi tidsmodulen. Deretter lager vi en variabel og gir den verdien “20”. I neste linje lager vi en funksjon som heter “Func1” og passerer to variabler “Increment” og “Lock” som parametere. Vi oppretter en global variabel kalt “A” og passerer den en lås.
Til slutt, i den følgende linjen, oppretter vi en variabel kalt “local_counter” og gir den inn i den. Verdien av denne "lokale telleren" økes i neste linje avhengig av hvilken tråd som er sist. Deretter kaller vi “tiden.søvn () ”metode og gi en periode på“ 0.5 ”sekunder i følgende linje. "Print ()" -metoden blir deretter utført og den lokale telleren lagres i variabelen "A". Innenfor denne funksjonen kalles den gjeldende tråden ved å bruke “Gjenging.current_thread ().Navnøkning A med økning "og passerer“ A ”som verdien er lagret i og" Release () "-metoden med lås kalles i følgende linje. I neste linje passerer vi Lock () -metoden.
Nå skal vi lage to tråder og ringe funksjonen ved å bruke trådene. Vi kaller funksjonen i den første tråden ved å bruke gjenging.Tråd, brukt “Target = Func1”, og passer argumentet “15” som økningen og “Lås”. Vi lagret denne første tråden i variabelen “T1” og deretter gjentar vi samme prosedyre for tråd 2, men vi passerer argumentet som er økningen av “5” og “Lock”. Deretter bruker vi “tråd.start () ”for å starte tråden og“ bli med () ”for å vente på at tråden skal være ferdig med å løpe. Den endelige verdien vises deretter.
Nå, bare sagt denne koden fører til at begge trådene leser verdien vi har delt. “T1” og “T2” vil prøve å endre verdien av “A” i inkrementfunksjonen ved å bruke økningsverdiene “15” og “5” som er gitt i parameteren Tuple.
Nå viser det sluttutfallet “40” i utgangen. Ettersom vi har "A = 20" i koden over, når "tråd 1" øker med "15", er resultatet "35" og verdien endres til "35" når "tråd 2" øker med "5" Resultatet er “40”.
Konklusjon
Python Thread Lock -funksjonen som har to metoder: anskaffelse () og utgivelse () er dekket i denne artikkelen. To eksempler er presentert i denne guiden. I første omgang har vi brukt en timeout i en anskaffelse () -låsen, og i det andre eksemplet har vi brukt en løpstilstand ved bruk av Python Lock () for å vise hvordan det påvirker hvordan tråder fungerer. Vi forventer at du vil finne disse sakene nyttige når du bruker Python trådlåser.