0% encontró este documento útil (0 votos)
149 vistas13 páginas

Hilos Python

El documento explica la diferencia entre multiproceso y multithreading. Multiproceso involucra la ejecución de múltiples procesos en diferentes núcleos, mientras que multithreading permite la ejecución concurrente de hilos dentro de un mismo proceso. También describe cómo los hilos en Python están sujetos al GIL y sólo pueden ejecutarse de forma concurrente de forma pseudo-paralela. Finalmente, presenta ejemplos de código para ilustrar el uso de hilos en Python.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
149 vistas13 páginas

Hilos Python

El documento explica la diferencia entre multiproceso y multithreading. Multiproceso involucra la ejecución de múltiples procesos en diferentes núcleos, mientras que multithreading permite la ejecución concurrente de hilos dentro de un mismo proceso. También describe cómo los hilos en Python están sujetos al GIL y sólo pueden ejecutarse de forma concurrente de forma pseudo-paralela. Finalmente, presenta ejemplos de código para ilustrar el uso de hilos en Python.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 13

Programación avanzada

Python
Instituto Politécnico Nacional
Unidad Profesional en Ingeniería y Tecnologías Avanzadas

Dra. Obdulia Pichardo Lagunas


¿Multiproceso o Multihilo?

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

• Los hilos permiten a las aplicaciones ejecutar


múltiples operaciones de forma concurrente en el
mismo espacio de proceso.

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.

• Por defecto el cambio de thread se realiza cada 10 instrucciones de


bytecode, aunque se puede modificar mediante la
función sys.setcheckinterval.
10
Ejemplo 1

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()

También podría gustarte