Blog
Hilos en Python
- Publicado por: Rafael Fernandez
- Categoría: Blog Principiante Python
Un hilo es un proceso del sistema operativo con características distintas de las de un proceso normal:
- Los hilos existen como subconjuntos de los procesos.
- Los hilos comparten memoria y recursos.
- Los hilos ocupan una dirección diferente en la memoria
En Python 2.X se pueden crear hilos utilizando el módulo threads y en Python 3.X se pueden crear utilizando el módulo _threads. El módulo threading será utilizado para interactuar con el módulo _threads.
¿Cuando implementar hilos? Cuando se quiera ejecutar una función al mismo tiempo que se ejecuta un programa. Cuando se crea software para servidores se quiere que el servidor no reciba solo una sino múltiples conexiones. En pocas palabras, los hilos permiten completar varias tareas al mismo tiempo.
Hilos en Python:
Se creará un programa con hilos en el cual se iniciaran 10. Cada uno imprimirá su ID:
import threading # Clase hilo class MiHilo(threading.Thread): def __init__(self,x): self.__x = x threading.Thread.__init__(self) def run (self): # run() se utiliza para definir el comportamiento del hilo print(str(self.__x)) # Inicia 10 hilos. for i in range(10): MiHilo(i).start()
La salida sería:
0 1 ... 9
Los hilos no siempre terminan una vez que se ejecutan. Pueden programarse para funcionar cada determinado intervalo de tiempo.
Hilos Cronometrados en Python:
En python, la clase Timer (temporizador) es una subclase de la clase Threads (hilos). Esto significa que se comporta de manera similar. La clase Timer puede ser utilizada para crear hilos temporizados. Los temporizadores son iniciados con el método .start() al igual que los hilos normales. El siguiente programa crea un hilo que se inicia luego de 3 segundos:
from threading import * def hola(): print("Hola mundo!") # Creacion del hilo t = Timer(3,hola) # Timer() recibe como primer parámetro el intervalo de tiempo que será usado # y como segundo parámetro la función a ejecutar. También recibe como 3er parámetro # Ejecución del Hilo # argumentos (args) y como 4to parametro argumentos de palabras clave (kwargs) t.start() # Por defecto, ambos tienen como valor 'None'
Funcionalidad de repetición implementando hilos
Se pueden ejecutar hilos infinitos de la siguiente forma:
from threading import * import time def manejarCliente1(): while(True): print("Esperando al cliente 1...") time.sleep(3) # Espera 3 segundos def manejarCliente2(): while(True): print("Esperando al cliente 2...") time.sleep(3) # Espera 3 segundos # Creacion de los hilos t = Timer(5.0, manejarCliente1) t2 = Timer(3.0, manejarCliente2) # Ejecutar los hilos t.start() t2.start()