Threads /Hilos en Python
Los threads son un concepto similar a los procesos: también
se trata de código en ejecución. Sin embargo los threads se ejecutan dentro de
un proceso, y los threads del proceso comparten recursos entre si, como la
memoria, por ejemplo.
El sistema operativo necesita menos recursos para crear y
gestionar los threads, y al compartir recursos, el cambio de contexto es más
rápido. Además, dado que los threads comparten el mismo espacio de memoria
global, es sencillo compartir información entre ellos: cualquier variable
global que tengamos en nuestro programa es vista por todos los threads.
EL GIL
La ejecución de los threads en Python está controlada por el
GIL (Global Interpreter Lock) de forma que sólo un thread puede ejecutarse a la
vez, independientemente del número de procesadores con el que cuente la
máquina.
THREADS EN PYTHON
El trabajo con threads se lleva a cabo en Python mediante el
módulo thread. Este módulo es opcional y dependiente de la plataforma, y puede
ser necesario, aunque no es común, recompilar el intérprete para añadir el
soporte de threads.
Además de thread, también contamos con el módulo threading
que se apoya en el primero para proporcionarnos una API de más alto nivel, más
completa, y orientada a objetos. El módulo threading se basa ligeramente en el
modelo de threads de Java.
El módulo threading contiene una clase Thread que debemos
extender para crear nuestros propios hilos de ejecución. El método run
contendrá el código que queremos que ejecute el thread. Si queremos especificar
nuestro propio constructor, este deberá llamar a
threading.Thread.__init__(self) para inicializar el objeto correctamente.
import threading class MiThread(threading.Thread): def __init__(self, num): threading.Thread.__init__(self) self.num = num def run(self): print "Soy el hilo", self.num
Para que el thread comience a ejecutar su código basta con
crear una instancia de la clase que acabamos de definir y llamar a su método
start. El código del hilo principal y el del que acabamos de crear se
ejecutarán de forma concurrente.
print "Soy el hilo principal" for i in range(0, 10): t = MiThread(i) t.start() t.join()
Programa que usa dos hilos.
Código:
import time import thread def imprimir_mensaje(mensaje): while True: print(mensaje) time.sleep(1) def main(): mensaje = "Thread1" #variable aux mensaje2 = "Thread2" # variable aux #empiezo el thread thread.start_new_thread(imprimir_mensaje, (mensaje,)) thread.start_new_thread(imprimir_mensaje, (mensaje2,)) x = raw_input("estoy esperando que presiones enter...\n") print ("Termino la funcion main") main()
Ejecución:
Referencia: https://www.youtube.com/watch?v=4HKy5nNEqeQ
Referencia: http://mundogeek.net/archivos/2008/04/18/threads-en-python/
No hay comentarios:
Publicar un comentario