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.