Python Kill Thread

Python Kill Thread

Sebbene non possiamo uccidere i fili in Python, ci sono alcune tecniche che possiamo usare per simulare l'uccisione di thread in Python. Uccidere un filo in Python improvvisamente è considerato un approccio di programmazione scadente poiché non possiamo uccidere direttamente il thread. Invece, dobbiamo usare uno dei metodi forniti da Python. Questi metodi terminano accuratamente i thread, ma sono abbastanza vicini al processo.

Creazione di un thread in Python

Quando si esegue un programma, un thread è un flusso separato di esecuzione che funziona sullo sfondo del programma. I thread di Python sono un tipo di processo che può avere la pianificazione della loro esecuzione. Un thread è, per dirla semplicemente, un processo di calcolo che un computer eseguirà. Il set di istruzioni di un programma può essere eseguito separatamente da altri codici. Il thread di sfondo non può essere terminato correttamente in Python ma ci sono altre tecniche che possiamo usare se desideriamo ancora terminare il thread. Questi metodi non terminano correttamente il thread; Piuttosto, sono solo molto utili nel farlo. Ma qui, dimostreremo prima come iniziare un thread prima di mostrarti come fermarlo.

Eseguiamo il codice. Innanzitutto, importiamo le librerie "tempo" e "thread". Quindi, nella riga seguente, definiamo la funzione "func1". Nella riga seguente, utilizziamo un ciclo per avviare la variabile "x" e impostare l'intervallo per le iterazioni del thread. Qui, impostiamo l'intervallo da "1" a "10", il che significa che il nostro thread si fermerà dopo "10" iterazioni. Nella riga seguente, chiamiamo "tempo.sleep () ", con un intervallo di tempo di" 1 ". Abbiamo usato il "tempo.funzione sleep () "quando volevamo ritardare l'esecuzione di una dichiarazione.

Quindi, abbiamo chiamato la funzione print () all'interno di questa funzione. Abbiamo superato la variabile "X", in cui il numero di iterazioni è stato archiviato e ha anche superato l'istruzione di input, "Iterazioni completate prima di smettere". Mentre impostiamo il tempo su "1", il sistema entrerà in modalità sospensione per "1" prima di stampare l'istruzione di stampa. Quindi, nella riga seguente, chiamiamo questa funzione "func" con il modulo "thread". Qui, abbiamo inizializzato la variabile "t" per archiviare il thread. Quindi, usiamo il "T.funzione start () "per avviare il thread. E chiamiamo funzione "join ()" con thread Il metodo "join ()" sospende l'implementazione di un programma fino a quando il thread di destinazione non è stato letto nella sua interezza.

Una volta che il thread ha completato le sue iterazioni "10", il sistema metterà in pausa il suo funzionamento per "1" secondo prima di stampare la frase "iterazioni completate prima di smettere."Ora, quando chiamiamo la funzione con il thread, inizierà l'esecuzione del thread mentre impostiamo sopra il ciclo e il suo intervallo è" 10 ".

Ora che ha mostrato tutte le sue iterazioni nell'output, è impossibile uccidere il thread qui. Quando facciamo clic su Ctrl-C dopo qualsiasi numero di iterazioni, il thread continuerà a funzionare fino a quando tutte le sue iterazioni saranno complete. Questo thread capisce solo che deve finire le sue iterazioni "10".

Usando il thread daemon per uccidere il thread

Ora, non siamo in grado di uccidere il thread usando questo metodo. Tuttavia, possiamo impedire al thread di terminare usando questo metodo semplicemente terminando la sua esecuzione dopo un determinato periodo di tempo, il thread non viene interrotto nel backend. I thread di sfondo che supportano continuamente i thread primari o non dAemon eseguendo in primo piano sono noti come thread daemon. Il thread daemon che funziona in background non impedisce al thread di morire.

Iniziamo il codice importando tre librerie: "Threading" è il primo, seguito da "Time" e "Sys" rispettivamente. Numerosi metodi e variabili nel pacchetto Python Sys possono essere utilizzati per cambiare componenti diversi del sistema operativo Python. Lavorare sull'interprete è reso possibile dalla sua accessibilità a costanti e metodi che hanno una stretta connessione all'interprete. Seguendo la creazione di una funzione con il nome "Func", abbiamo usato una condizione "Why True" per funzionare condizionatamente fino a quando la dichiarazione non è stata eseguita all'interno del loop.

Quindi, nella riga successiva, abbiamo usato la funzione "Print ()" per stampare la frase, "Il thread è attivo ma scomparirà quando il programma termina", dopo aver passato il tempo "1" secondi nel "tempo.funzione sleep () ”. Come abbiamo usato “Time.sleep () "sopra per impostare il tempo su" 1 "secondi, l'istruzione ora inserisce la modalità di sospensione per un secondo prima di produrre questo metodo. Quindi, nella riga seguente, utilizziamo il demone e la sua proprietà per "true" per consentirci di terminare i nostri thread dopo un tempo predeterminato.

Attualmente stiamo generando un thread usando "threading.thread "e usando" target = func "per chiamare la funzione nel thread. Ora che abbiamo usato "T.start () "per iniziare il nostro thread, abbiamo chiamato" sys.EXIT () ", che farà il lancio del sistema di uscita del sistema. Quindi, ciò che fa veramente questo codice è visualizzare l'istruzione di stampa che è stata salvata nella funzione "func" quando il thread lo chiama ma ritarda la stampa di stazione di "1" secondi perché abbiamo usato "tempo.sonno()."

Come puoi vedere, il thread è attualmente in esecuzione, ma quando stava per completare la sua ottava iterazione, abbiamo premuto Ctrl-C, che ha immediatamente interrotto la terminazione del thread. Ciò significa essenzialmente che usando un thread daemon, non siamo stati in grado di uccidere effettivamente il thread, solo per impedirlo di correre. Questo non è il modo più efficiente per terminare il thread; Invece, dobbiamo porre fine all'intera operazione.

Dal momento che non è possibile forzare il thread a terminare interrompendolo con la tastiera, ora stiamo usando l'oggetto eventi Python nel prossimo script. Questo farà fermare il thread da solo. Non abbiamo bisogno di colpire le chiavi per impedirgli di finire. Questo oggetto evento è offerto nel modulo thread. Ha due metodi specificati: set () e non set ().

Iniziamo implementando il codice importando i pacchetti "segnale", "threading" e "time". La riga successiva quindi usa "threading.evento () "per invocare l'evento del thread. Quindi, nella riga seguente, utilizziamo la funzione di stampa () e all'interno di essa, chiamiamo l'istruzione di input passando l'argomento “I di 20 iterazioni."Stiamo stampando il valore di" I "nella variabile" F ", che è di" 20 "iterazioni. Quindi, nella riga seguente, utilizziamo un ciclo per loop e al suo interno, creiamo la variabile "I" e impostiamo l'intervallo su "1" su "20". Quindi, abbiamo usato la condizione "if" che è se uscita.evento.è set () rompe il ciclo che significa se l'evento è set () quindi termina. Stiamo usando la funzione print () per stampare l'istruzione che è "iterazioni completata prima di uscire" e stampare il valore "i" nella variabile "F". Abbiamo usato la condizione "if" che è se uscita .evento.è set () quindi rompere il ciclo.

Successivamente, abbiamo creato una nuova funzione con il nome "Handler Signal" a cui abbiamo superato le variabili "Signorum" e "Frame". Dopo aver usato Exit_Event.set (), abbiamo chiamato le funzioni "gestore del segnale" con segnale.segnale e funzione "func" con "threading.thread ", rispettivamente. Infine, abbiamo usato la funzione join () alla fine per collegare le due funzioni.

Come puoi vedere nel display dei risultati, impostiamo l'intervallo su "20", il che indica che il calcolo finirà dopo venti iterazioni, ma in questo caso, si è conclusa dopo cinque iterazioni anche se non abbiamo fatto clic su tasti di interruzione della tastiera. Ciò indica che il thread non è stato ucciso ma piuttosto terminato, il che è benefico per la presentazione.

Conclusione

In questo articolo, abbiamo discusso di come uccidere un thread in Python, tuttavia, abbiamo scoperto che mentre possiamo fermare l'esecuzione di un thread dopo un certo numero di iterazioni, non possiamo uccidere un thread in Python. Prima abbiamo creato un thread e poi abbiamo usato un thread demone per ucciderlo. Anche così, abbiamo scoperto che, durante l'utilizzo di questo modulo, potremmo immediatamente fermare l'esecuzione del thread digitando CTRL-C e il thread non sarebbe stato ucciso. Il thread verrà immediatamente interrotto dopo una certa quantità di esecuzione quando abbiamo usato gli oggetti dell'evento Python, il che è stato utile.