Anuncios

Bienvenidos sean a este post, hoy veremos como detener los threads y los procesos.

Anuncios

Deteniendo un thread

Si pasaron por los posts anteriores sabran que no es una buena idea detener un thread pero estando completamente seguro de que todo esta controlado y cerrar todo lo abierto sin quede nada huerfano puede ser muy dificultoso, sin embargo esto no quiere decir que el lenguaje no nos proporciona herramientas para poder detener un thread, como siempre para entender este concepto vamos a ver un ejemplo, para ello primero crearemos un nuevo archivo que llamaremos stop_thread.py y le agregaremos el siguiente codigo:

stop_thread.py

import threading
from time import sleep

class Fibo(threading.Thread):
	def __init__(self, *a, **pca):
		super().__init__(*a, **pca)
		self._corriendo = True

	def stop(self):
		self._corriendo = False

	def run(self):
		a, b = 0, 1
		while self._corriendo:
			print(a, end=' ')
			a, b = b, a + b
			sleep(0.07)
		print()

fibo = Fibo()
fibo.start()
sleep(1)
fibo.stop()
fibo.join()
print('Todo hecho')
Anuncios
Anuncios

Primero importaremos el modulo para manejar los threads y luego a sleep de time para generar unas pequeñas demoras, en este caso crearemos una clase para calcular la sucesion de Fibonacci, observen que recibe un thread, lo primero que haremos sera usar un __init__ para iniciar por medio de super el __init__ original donde le pasaremos dos argumentos, por ultimo establecemos a _corriendo como True, lo siguiente es un metodo llamado stop para sobrecargar a este y en ella le diremos que establezca a _corriendo como False, por ultimo tenemos otro metodo llamado run donde tambien sobrecargaremos el original, en este establecemos los valores para a y b como 0 y 1, despues tenemos un bucle while donde correra mientras _corriendo sea True, en este mostraremos el valor de a seguido de un espacio en blanco, luego volvemos a establecer los valores de a y b donde el valor de a ahora tendra el de b y en b pondremos la suma de a y b, por ultimo hacemos una pequeña demora, una vez terminado el ciclo usaremos un print vacio para hacer un Enter, con esto terminamos la clase.

Anuncios

Lo siguiente que haremos es crear un objeto llamado fibo de tipo Fibo, luego lo iniciaremos por medio de start (recuerden que es un thread), le agregamos una demora por medio de sleep, para finalmente detenerlo y terminar el thread por medio de join, por ultimo imprimiremos un mensaje, veamos su salida:

Anuncios

En el video podemos ver como se demora en procesar todo lo explicado anteriormente, gracias a los sleep y como pudimos detener el thread generado, si bien logramos el objetivo esto no es una buena practica y si en nuestro codigo debemos detener constantemente threads es porque algo no esta bien diseñado y deberiamos revisarlo, pasemos al siguiente tema.

Anuncios

Detener un proceso

Si bien en el caso anterior vimos como detener un thread de manera bastante exitosa a la hora de detener un proceso es un poco diferente y sin complicaciones, para ello debemos usar tanto terminate o kill pero recuerden todas las consideraciones que mencionamos en posts anteriores sobre todos los recursos abiertos que quedan pendientes porque siguen siendo ciertas.

Anuncios

En resumen, hoy hemos visto como podemos detener un thread, como seguimos recordando que no es una buena practica pero se puede hacer, como vimos en el ejemplo, y por ultimo hemos visto cuales son las funciones para terminar un proceso pero sigue sin ser una buena practica, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50