|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
import threading import time class MyThread(threading.Thread): def __init__(self): threading.Thread.__init__(self) self._stop_event = threading.Event() def run(self): i = 0 while not self._stop_event.is_set(): print("Contando: ", i) i += 1 time.sleep(1) print("El hilo ha sido interrumpido") def stop(self): self._stop_event.set() if __name__ == "__main__": t = MyThread() t.start() time.sleep(5) t.stop() t.join() |

En Python la detención de un proceso se realiza mediante una bandera booleana self._stop_event para indicar al subproceso que debe detenerse. Esta bandera se verifica periódicamente dentro del método run() del subproceso y se establece como True mediante un método personalizado, como stop(), que se define en la clase.
En este ejemplo, se define la clase MyThread que hereda de Thread. En el constructor de la clase, se inicializa la bandera booleana _stop_event como un objeto Event de threading.
Dentro del método run(), se utiliza un ciclo while para contar indefinidamente y se verifica continuamente si la bandera _stop_event está establecida. Si la bandera es verdadera, el ciclo while se detiene y el mensaje «El hilo ha sido interrumpido» se imprime en la consola.
El método stop() se define en la clase para establecer la bandera _stop_event como True.
En el bloque if __name__ == "__main__":, se crea una instancia de MyThread y se inicia. Después de esperar 5 segundos, se llama al método stop() para interrumpir el subproceso, y finalmente se llama al método join() para esperar a que el subproceso termine antes de que el programa principal finalice.