Python Kill Thread

Python Kill Thread

Selv om vi ikke kan drepe tråder i Python, er det noen få teknikker vi kan bruke for å simulere tråddrap i Python. Å drepe en tråd i Python blir plutselig sett på som en dårlig programmeringsmetode siden vi ikke kan drepe tråden direkte. I stedet må vi bruke en av metodene levert av Python. Disse metodene vil avslutte trådene nøyaktig, men de er ganske nær prosessen.

Opprette en tråd i Python

Når du kjører et program, er en tråd en egen utførelsesstrøm som kjører i bakgrunnen for programmet. Python -tråder er en type prosess som kan få planlagt utførelsen. En tråd er, for å si det enkelt, en databehandlingsprosess som en datamaskin vil utføre. Et programs sett med instruksjoner kan utføres separat fra andre koder. Bakgrunnstråden kan ikke avsluttes ordentlig i Python, men det er andre teknikker vi kan bruke hvis vi fremdeles ønsker å avslutte tråden. Disse metodene avslutter imidlertid ikke tråden riktig; snarere er de bare veldig hjelpsomme med å gjøre det. Men her vil vi først demonstrere hvordan du starter en tråd før du viser deg hvordan du stopper den.

La oss utføre koden. Først importerer vi "Time" og "tråd" -bibliotekene. Deretter definerer vi i den følgende linjen "Func1" -funksjonen. I den følgende linjen bruker vi en for loop for å starte variabelen “x” og angi rekkevidden for trådens iterasjoner. Her setter vi rekkevidden fra “1” til “10”, noe som betyr at tråden vår vil stoppe etter “10” iterasjoner. I den følgende linjen kaller vi “tid.søvn (), ”med et tidsintervall på“ 1 ”. Vi brukte tiden.Sleep () ”-funksjon når vi ønsket å utsette utførelsen av en uttalelse.

Deretter kalte vi print () -funksjonen i denne funksjonen. Vi passerte variabelen “X”, hvor antallet iterasjoner er lagret og også bestått inngangserklæringen, “Fullførte iterasjoner før vi sluttet”. Når vi setter tiden til “1”, vil systemet gå i søvnmodus for “1” før du skriver ut utskriftserklæringen. Deretter kaller vi i den følgende linjen denne funksjonen "func" med "tråden" -modulen. Her initialiserte vi “T” -variabelen for å lagre tråden i den. Deretter bruker vi “t.start () ”-funksjon for å starte tråden. Og vi kaller "bli med ()" -funksjonen med tråd "join ()" -metoden suspenderer et programs implementering til destinasjonstråden er lest i sin helhet.

Når tråden har fullført sine "10" iterasjoner, vil systemet pause driften for "1" sekund før du skriver ut uttrykket "fullførte iterasjoner før de slutter.”Nå, når vi kaller funksjonen med tråd, vil den begynne utførelsen av tråden når vi setter over løkken og rekkevidden er“ 10 ”.

Nå som den har vist alle iterasjoner i utgangen, er det umulig å drepe tråden her. Når vi klikker på CTRL-C etter et antall iterasjoner, vil tråden fortsette å kjøre til alle iterasjonene er fullført. Denne tråden forstår bare at den må fullføre sine "10" iterasjoner.

Bruker demontråd for å drepe tråden

Nå kan vi ikke drepe tråden ved hjelp av denne metoden. Skjønt, vi kan hindre tråden fra å avslutte ved hjelp av denne metoden ved å bare avslutte utførelsen etter en fast tid, tråden blir ikke stoppet i backend. Bakgrunnsløpede tråder som kontinuerlig støtter primære eller ikke-daemon-tråder ved å løpe i forgrunnen, er kjent som Daemon Threads. Daemon -tråden som går i bakgrunnen, hindrer ikke tråden fra å dø.

La oss starte koden ved å importere tre biblioteker: "Gjenging" er den første, etterfulgt av henholdsvis "Time" og "Sys". Tallrike metoder og variabler i Python Sys -pakken kan brukes til å endre forskjellige komponenter i Python -operativsystemet. Å jobbe med tolken blir muliggjort av dens tilgjengelighet til konstanter og metoder som har en nær tilknytning til tolken. Etter opprettelsen av en funksjon med navnet "func", brukte vi en "mens ekte" tilstand for å jobbe betinget til uttalelsen ble utført inne i løkken.

Deretter, i neste linje, brukte vi "print ()" -funksjonen for å skrive ut uttrykket "tråden er aktiv, men vil forsvinne når programmet slutter," etter å ha passert tiden "1" sekunder inn i "tiden.Sleep () ”-funksjon. Som vi brukte "tid.Sleep () ”ovenfor for å sette tiden til“ 1 ”sekunder, vil uttalelsen nå legge inn søvnmodus i ett sekund før du sender ut denne metoden. Deretter bruker vi på følgende linje og dens eiendom til å "sann" for å tillate oss å avslutte trådene våre etter en forhåndsbestemt tid.

For øyeblikket genererer vi en tråd ved å bruke “Gjenging.Tråd ”og bruker“ Target = func ”for å ringe funksjonen i tråden. Nå som vi har brukt “t.Start () ”For å starte tråden vår, har vi kalt“ Sys.exit (), ”som vil føre til at systemet kastet et unntak for systemavgang. Så det denne koden virkelig gjør er å vise utskriftserklæringen som ble lagret i funksjonen “func” når tråden kaller den, men den forsinker å skrive ut uttalelsen med "1" sekunder fordi vi brukte "tid.sove().”

Som du ser, kjører tråden for øyeblikket, men når den var i ferd med å fullføre sin åttende iterasjon, trykket vi CTRL-C, som umiddelbart stoppet avslutningen av tråden. Dette betyr egentlig at vi ved å bruke en demontråd, ikke kunne drepe tråden, bare for å hindre den i å løpe. Dette er ikke den mest effektive måten å avslutte tråden på; I stedet må vi avslutte hele operasjonen.

Siden det ikke er mulig å tvinge tråden til å ende ved å avbryte den med tastaturet, bruker vi nå Python Events -objektet i neste skript. Dette vil føre til at tråden stopper på egen hånd. Vi trenger ikke å treffe noen nøkler for å stoppe den fra å slutte. Dette hendelsesobjektet tilbys i trådmodulen. Den har to spesifiserte metoder: sett () og ikke satt ().

La oss starte med å implementere koden ved å importere "signalet", "tråd" og "tid" -pakker. Neste linje bruker deretter “Gjenging.arrangement () ”for å påkalle trådens begivenhet. Deretter bruker vi i den følgende linjen utskriftsfunksjonen () og innsiden av den, vi kaller inngangsuttalelsen ved å sende argumentet “i av 20 iterasjoner.”Vi skriver ut verdien av“ jeg ”i variabelen“ F ”, som er av“ 20 ”iterasjoner. Deretter, i den følgende linjen, bruker vi en for loop og innsiden av den, lager vi variabelen “I” og setter rekkevidden til “1” til “20”. Deretter brukte vi "hvis" -tilstanden som er hvis du går ut.begivenhet.er satt () Det bryter løkken som betyr at hvis hendelsen er SET () -metoden, avsluttes deretter. Vi bruker PRINT () -funksjonen for å skrive ut uttalelsen som er "iterasjoner fullført før de forlater" og skriver ut "i" -verdien i "F" -variabelen. Vi brukte "hvis" -tilstanden som er hvis du går ut .begivenhet.er satt () og bryter deretter sløyfen.

Deretter opprettet vi en ny funksjon med navnet "Signalhandler" som vi passerte variablene "Signum" og "Frame". Etter å ha brukt exit_event.sett (), kalte vi funksjonene "signalbehandler" med signal.Signal og funksjon “func” med “Gjenging.tråd, ”henholdsvis. Til slutt brukte vi join () -funksjonen til slutt for å koble de to funksjonene.

Som du kan se i resultatvisningen, setter vi rekkevidden til "20", som indikerer at beregningen vil ende etter tjue iterasjoner, men i dette tilfellet endte den etter fem iterasjoner, selv om vi ikke klikket på noen tastaturavbruddstaster. Dette indikerer at tråden ikke ble drept, men snarere avsluttet, noe som er gunstig for presentasjonen.

Konklusjon

I denne artikkelen diskuterte vi hvordan vi kan drepe en tråd i Python, men vi oppdaget at mens vi kan stoppe en tråds utførelse etter et visst antall iterasjoner, kan vi ikke drepe en tråd i Python. Vi opprettet først en tråd og brukte deretter en demontråd for å drepe den. Likevel fant vi ut at mens vi brukte denne modulen, kunne vi umiddelbart stoppe trådens utførelse ved å skrive CTRL-C, og tråden ville ikke bli drept. Tråden blir øyeblikkelig stoppet etter en viss utførelse når vi brukte Python -hendelsesobjekter, noe som var nyttig.