Hilos Python
Hilos Python
Python
Instituto Politécnico Nacional
Unidad Profesional en Ingeniería y Tecnologías Avanzadas
2
Multiproceso
En multiproceso
• Cada aplicación se aloja en cada núcleo del procesador
• Los procesos son resueltos por el núcleo que lo contenga (un proceso por
aplicación)
• Puede utilizar todos los núcleos con que se cuente para el procesamiento.
3
Multihilo
En Multhilo
• Consiste en dividir el trabajo de un programa en diferentes hilos de
ejecución.
• Los hilos pueden correr en procesadores separados o en el mismo.
4
Hilos
5
Hilos (2)
6
Hilos (3)
7
Transiciones
• Creación: Cuando se crea un hilo para ese proceso, éste hilo puede crear
otros hilos dentro del mismo proceso. Cada hilo tendrá su propio contexto y
su propio espacio de pila, y pasara a la cola de listos.
• Bloqueo: Cuando un hilo necesita esperar por un suceso, se bloquea
(salvando sus registros). Ahora el procesador podrá pasar a ejecutar otro hilo
que este en la cola de Listos mientras el anterior permanece bloqueado.
8
Transiciones (2)
• Desbloqueo: Cuando el suceso por el que el hilo se bloqueo se produce, el
mismo pasa a la cola de Listos.
• Terminación (muerto): Cuando un hilo finaliza se liberan tanto su contexto
como sus pilas.
9
Hilos en Python
• La ejecución de los threads en Python está controlada por el GIL
(Global Interpreter Lock)
• Sólo un thread puede ejecutarse a la vez, independientemente del
número de procesadores con el que cuente la máquina
• La ejecución del hilo se suspende cada cierto número de
instrucciones de bytecode dela máquina virtual y se elige otro de
entre los que estaban esperando.
import threading
def trabajador():
print("prueba uno \n")
arreglo= []
for i in range (10):
arreglo.append(threading.Thread(target=trabajador))
arreglo[i].start()
11
Ejemplo 2
import threading
def trabajador(count):
print ("Este es el %s \n" % count)
return
threads = list()
for i in range(3):
t = threading.Thread(target=trabajador, args=(i,))
threads.append(t)
t.start()
12
Ejemplo 3
import threading
import time
def trabajador():
print (threading.currentThread().getName(), '\nLanzado')
time.sleep(2)
print (threading.currentThread().getName(), 'Deteniendo')
def servicio():
print (threading.currentThread().getName(), '\nLanzado')
print (threading.currentThread().getName(), ' Deteniendo')
t = threading.Thread(target=servicio, name='\nServicio')
w = threading.Thread(target=trabajador, name='Trabajador')
z = threading.Thread(target=trabajador)
w.start()
z.start() 13
t.start()