SlideShare una empresa de Scribd logo
Laboratorio 3
Sistemas Operativos III (SO-III)
Módulo II: Comunicación entre procesos en SOD
Introducción
2.1 Comunicación entre procesos
2.2 Comunicación de procesos a través de Paso de mensajes
Actividades:
Explique el funcionamiento de los siguientes códigos cuatro codigos:
uso-hilos.py
 threading: Módulo que permite trabajar con hilos.
 time: Módulo para manejar operaciones de tiempo (como pausas).
 datetime: Módulo para manejar fechas y horas.
 logging: Módulo para generar logs (aunque no se utiliza en el código mostrado).
Definición de funciones:
 consultar(id_persona): Simula una operación de consulta que toma 2 segundos en completarse.
 guardar(id_persona, data): Simula una operación de guardar datos que toma 5 segundos en completarse.
Inicio del tiempo:
tiempo_ini = datetime.datetime.now()
 Captura el tiempo inicial antes de iniciar los hilos.
Creación y ejecución de hilos:
 t1 y t2 son hilos creados con el módulo threading.
 t1 ejecutará la función consultar con el argumento 1.
 t2 ejecutará la función guardar con los argumentos 1 y "Aprendiendo el uso de hilos".
 t1.start() y t2.start() inician la ejecución de los hilos.
Esperar a que los hilos terminen:
 t1.join() y t2.join() aseguran que el programa espere hasta que ambos hilos terminen su ejecución antes de continuar.
Fin del tiempo:
tiempo_fin = datetime.datetime.now()
 Captura el tiempo final después de que los hilos han terminado.
Cálculo del tiempo transcurrido:
print("tiempo transcurrido " + str(tiempo_fin.second - tiempo_ini.second))
 Calcula y muestra el tiempo transcurrido en segundos entre el inicio y el fin de la ejecución de los hilos.
Explicación adicional
El propósito del código es demostrar cómo se pueden ejecutar dos funciones (en este caso, consultar y guardar) en paralelo
utilizando hilos.
uso-hilos2.py
Explicación del código secuencial
Importaciones:
import threading
import time
import datetime
import logging
Estas importaciones se mantienen igual y son necesarias para el uso de hilos y manejo de tiempo, aunque en este ejemplo
específico no se están utilizando los hilos.
Definición de funciones:
Las funciones consultar y guardar son las mismas que en el ejemplo anterior. Simulan operaciones que tardan 2 segundos y 5
segundos respectivamente.
Inicio del tiempo:
tiempo_ini = datetime.datetime.now()
Captura el tiempo inicial antes de ejecutar las funciones.
Ejecución de funciones de manera secuencial:
# t1 = threading.Thread(name="hilo_1", target=consultar, args=(1, ))
# t2 = threading.Thread(name="hilo_2", target=guardar, args=(1, "Aprendiendo el uso de hilos"))
# t1.start()
# t2.start()
consultar(1)
guardar(1, "Aprendiendo el uso de hilos")
En lugar de crear y empezar los hilos t1 y t2, las funciones consultar y guardar se ejecutan secuencialmente. Esto significa que
consultar se ejecutará primero y, una vez finalizada, se ejecutará guardar.
Fin del tiempo:
tiempo_fin = datetime.datetime.now()
Captura el tiempo final después de que ambas funciones han terminado de ejecutarse.
Cálculo del tiempo transcurrido:
print("tiempo transcurrido " + str(tiempo_fin.second - tiempo_ini.second))
Calcula y muestra el tiempo transcurrido en segundos entre el inicio y el fin de la ejecución de las funciones.
uso-hilos3.py
Explicación del código con hilos
Importaciones:
import threading
import time
import datetime
import logging
Las importaciones son necesarias para manejar hilos y tiempo en Python. Aunque logging no se usa en el código mostrado, se
mantiene por si se requiere para futuros registros de logs
Definición de funciones:
def consultar(id_persona):
time.sleep(2)
def guardar(id_persona, data):
time.sleep(5)
 consultar(id_persona): Simula una operación de consulta que toma 2 segundos.
 guardar(id_persona, data): Simula una operación de guardar datos que toma 5 segundos.
Inicio del tiempo:
tiempo_ini = datetime.datetime.now()
 Captura el tiempo inicial antes de iniciar los hilos.
Creación y ejecución de hilos:
 t1 y t2 son hilos creados con el módulo threading.
 t1 ejecutará la función consultar con el argumento 1.
 t2 ejecutará la función guardar con los argumentos 1 y "Aprendiendo el uso de hilos".
 t1.start() y t2.start() inician la ejecución de los hilos.
Esperar a que los hilos terminen:
t1.join()
t2.join()
 t1.join() y t2.join() aseguran que el programa principal espere hasta que ambos hilos terminen su ejecución antes de
continuar. Esto es crucial para medir el tiempo transcurrido correctamente.
Fin del tiempo:
tiempo_fin = datetime.datetime.now()
 Captura el tiempo final después de que los hilos han terminado.
Cálculo del tiempo transcurrido:
print("tiempo transcurrido " + str(tiempo_fin.second - tiempo_ini.second))
 Calcula y muestra el tiempo transcurrido en segundos entre el inicio y el fin de la ejecución de los hilos.
uso-hilos3.py demuestra cómo usar hilos para ejecutar tareas en paralelo y esperar a que terminen, lo que puede mejorar
significativamente el rendimiento en comparación con la ejecución secuencial de las tareas.
uso-hilos4.py
Explicación del Código
Importación de Módulos:
import threading
import time
import datetime
import logging
 threading: Para trabajar con hilos.
 time: Para funciones relacionadas con el tiempo, como sleep.
 datetime: Para trabajar con fechas y horas.
 logging: Para registrar mensajes de log, útil para depuración.
Configuración del Logging:
logging.basicConfig(level=logging.DEBUG, format='[%(levelname)s] (%(threadName)-s) %(message)s')
 Configura el módulo de logging para que muestre mensajes de nivel DEBUG o superior. El formato especifica cómo se
verán los mensajes de log, incluyendo el nivel de log, el nombre del hilo y el mensaje.
Definición de la función consultar:
def consultar(id_persona):
logging.info("Consultando para el id " + str(id_persona))
time.sleep(2)
return
 Esta función simula una consulta para un id_persona. Registra un mensaje informativo y luego duerme el hilo durante 2
segundos.
Definición de la función guardar:
def guardar(id_persona, data):
logging.info("Consultando para el id " + str(id_persona) + " data " + data)
time.sleep(5)
return
 Esta función simula el guardado de datos para un id_persona con la información data. Registra un mensaje informativo y
luego duerme el hilo durante 5 segundos.
Registro del tiempo inicial:
tiempo_ini = datetime.datetime.now()
 Guarda el tiempo actual antes de iniciar los hilos.
Creación de Hilos:
t1 = threading.Thread(name="hilo_1", target=consultar, args=(1,))
t2 = threading.Thread(name="hilo_2", target=guardar, args=(1, "Aprendiendo el uso de hilos"))
 t1: Crea un hilo llamado hilo_1 que ejecutará la función consultar con el argumento 1.
 t2: Crea un hilo llamado hilo_2 que ejecutará la función guardar con los argumentos 1 y "Aprendiendo el uso de hilos".
Inicio de los Hilos:
t1.start()
t2.start()
 Inicia la ejecución de los hilos t1 y t2.
Esperar a que los Hilos Terminen:
t1.join()
t2.join()
 Bloquea la ejecución principal hasta que los hilos t1 y t2 hayan terminado.
Registro del tiempo final:
tiempo_fin = datetime.datetime.now()
 Guarda el tiempo actual después de que los hilos hayan terminado.
Cálculo y impresión del tiempo transcurrido:
print("tiempo transcurrido " + str(tiempo_fin.second - tiempo_ini.second))
Calcula y muestra el tiempo transcurrido en segundos. Esta forma de calcular el tiempo puede ser imprecisa si la ejecución cruza
un cambio de minuto.

Más contenido relacionado

Similar a Material-Lab-2-Trabajo-con-hilos.docx.............

Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteTópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
José Antonio Sandoval Acosta
 
Tema 3 xml processing ap is
Tema 3   xml processing ap isTema 3   xml processing ap is
Tema 3 xml processing ap is
xkorpium
 
Thread
ThreadThread
Thread
David Lilue
 
DIAPOSITIVAS UNIDAD3.pdf
DIAPOSITIVAS UNIDAD3.pdfDIAPOSITIVAS UNIDAD3.pdf
DIAPOSITIVAS UNIDAD3.pdf
DaveParker23
 
SCJP, Clase 9: Threads
SCJP, Clase 9: ThreadsSCJP, Clase 9: Threads
SCJP, Clase 9: Threads
flekoso
 
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrenteTopicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
José Antonio Sandoval Acosta
 
Preguntas
PreguntasPreguntas
Preguntas
Edward Contreras
 
hilosJava.pptx
hilosJava.pptxhilosJava.pptx
hilosJava.pptx
ssuser82a30d1
 
Practica 1 html_basico
Practica 1 html_basicoPractica 1 html_basico
Practica 1 html_basico
fanny casadiego
 
DefinicionExplicacionEjemplosdeHilosenJava
DefinicionExplicacionEjemplosdeHilosenJavaDefinicionExplicacionEjemplosdeHilosenJava
DefinicionExplicacionEjemplosdeHilosenJava
DanielCorzo12
 
Tema 12 hilos en java por gio
Tema 12   hilos en java por gioTema 12   hilos en java por gio
Tema 12 hilos en java por gio
Robert Wolf
 
procesos
procesosprocesos
Chap 15apin
Chap 15apinChap 15apin
Chap 15apin
Alvaro Pino
 
Programación multitarea
Programación multitareaProgramación multitarea
Programación multitarea
bowelmx
 
Threads en java
Threads en javaThreads en java
Threads en java
jent46
 
Threads en Java
Threads en JavaThreads en Java
Threads en Java
Ronny Parra
 
Hilos
HilosHilos
Hilos
johanna20
 
C++
C++C++
Programación en c++
Programación en c++Programación en c++
Cplus
CplusCplus

Similar a Material-Lab-2-Trabajo-con-hilos.docx............. (20)

Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteTópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
 
Tema 3 xml processing ap is
Tema 3   xml processing ap isTema 3   xml processing ap is
Tema 3 xml processing ap is
 
Thread
ThreadThread
Thread
 
DIAPOSITIVAS UNIDAD3.pdf
DIAPOSITIVAS UNIDAD3.pdfDIAPOSITIVAS UNIDAD3.pdf
DIAPOSITIVAS UNIDAD3.pdf
 
SCJP, Clase 9: Threads
SCJP, Clase 9: ThreadsSCJP, Clase 9: Threads
SCJP, Clase 9: Threads
 
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrenteTopicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
 
Preguntas
PreguntasPreguntas
Preguntas
 
hilosJava.pptx
hilosJava.pptxhilosJava.pptx
hilosJava.pptx
 
Practica 1 html_basico
Practica 1 html_basicoPractica 1 html_basico
Practica 1 html_basico
 
DefinicionExplicacionEjemplosdeHilosenJava
DefinicionExplicacionEjemplosdeHilosenJavaDefinicionExplicacionEjemplosdeHilosenJava
DefinicionExplicacionEjemplosdeHilosenJava
 
Tema 12 hilos en java por gio
Tema 12   hilos en java por gioTema 12   hilos en java por gio
Tema 12 hilos en java por gio
 
procesos
procesosprocesos
procesos
 
Chap 15apin
Chap 15apinChap 15apin
Chap 15apin
 
Programación multitarea
Programación multitareaProgramación multitarea
Programación multitarea
 
Threads en java
Threads en javaThreads en java
Threads en java
 
Threads en Java
Threads en JavaThreads en Java
Threads en Java
 
Hilos
HilosHilos
Hilos
 
C++
C++C++
C++
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 
Cplus
CplusCplus
Cplus
 

Material-Lab-2-Trabajo-con-hilos.docx.............

  • 1. Laboratorio 3 Sistemas Operativos III (SO-III) Módulo II: Comunicación entre procesos en SOD Introducción 2.1 Comunicación entre procesos 2.2 Comunicación de procesos a través de Paso de mensajes Actividades: Explique el funcionamiento de los siguientes códigos cuatro codigos: uso-hilos.py  threading: Módulo que permite trabajar con hilos.  time: Módulo para manejar operaciones de tiempo (como pausas).  datetime: Módulo para manejar fechas y horas.  logging: Módulo para generar logs (aunque no se utiliza en el código mostrado). Definición de funciones:
  • 2.  consultar(id_persona): Simula una operación de consulta que toma 2 segundos en completarse.  guardar(id_persona, data): Simula una operación de guardar datos que toma 5 segundos en completarse. Inicio del tiempo: tiempo_ini = datetime.datetime.now()  Captura el tiempo inicial antes de iniciar los hilos. Creación y ejecución de hilos:  t1 y t2 son hilos creados con el módulo threading.  t1 ejecutará la función consultar con el argumento 1.  t2 ejecutará la función guardar con los argumentos 1 y "Aprendiendo el uso de hilos".  t1.start() y t2.start() inician la ejecución de los hilos. Esperar a que los hilos terminen:  t1.join() y t2.join() aseguran que el programa espere hasta que ambos hilos terminen su ejecución antes de continuar. Fin del tiempo: tiempo_fin = datetime.datetime.now()  Captura el tiempo final después de que los hilos han terminado. Cálculo del tiempo transcurrido: print("tiempo transcurrido " + str(tiempo_fin.second - tiempo_ini.second))  Calcula y muestra el tiempo transcurrido en segundos entre el inicio y el fin de la ejecución de los hilos. Explicación adicional El propósito del código es demostrar cómo se pueden ejecutar dos funciones (en este caso, consultar y guardar) en paralelo utilizando hilos.
  • 3. uso-hilos2.py Explicación del código secuencial Importaciones: import threading import time import datetime import logging Estas importaciones se mantienen igual y son necesarias para el uso de hilos y manejo de tiempo, aunque en este ejemplo específico no se están utilizando los hilos. Definición de funciones: Las funciones consultar y guardar son las mismas que en el ejemplo anterior. Simulan operaciones que tardan 2 segundos y 5 segundos respectivamente. Inicio del tiempo: tiempo_ini = datetime.datetime.now() Captura el tiempo inicial antes de ejecutar las funciones.
  • 4. Ejecución de funciones de manera secuencial: # t1 = threading.Thread(name="hilo_1", target=consultar, args=(1, )) # t2 = threading.Thread(name="hilo_2", target=guardar, args=(1, "Aprendiendo el uso de hilos")) # t1.start() # t2.start() consultar(1) guardar(1, "Aprendiendo el uso de hilos") En lugar de crear y empezar los hilos t1 y t2, las funciones consultar y guardar se ejecutan secuencialmente. Esto significa que consultar se ejecutará primero y, una vez finalizada, se ejecutará guardar. Fin del tiempo: tiempo_fin = datetime.datetime.now() Captura el tiempo final después de que ambas funciones han terminado de ejecutarse. Cálculo del tiempo transcurrido: print("tiempo transcurrido " + str(tiempo_fin.second - tiempo_ini.second)) Calcula y muestra el tiempo transcurrido en segundos entre el inicio y el fin de la ejecución de las funciones.
  • 5. uso-hilos3.py Explicación del código con hilos Importaciones: import threading import time import datetime import logging Las importaciones son necesarias para manejar hilos y tiempo en Python. Aunque logging no se usa en el código mostrado, se mantiene por si se requiere para futuros registros de logs Definición de funciones: def consultar(id_persona): time.sleep(2) def guardar(id_persona, data): time.sleep(5)
  • 6.  consultar(id_persona): Simula una operación de consulta que toma 2 segundos.  guardar(id_persona, data): Simula una operación de guardar datos que toma 5 segundos. Inicio del tiempo: tiempo_ini = datetime.datetime.now()  Captura el tiempo inicial antes de iniciar los hilos. Creación y ejecución de hilos:  t1 y t2 son hilos creados con el módulo threading.  t1 ejecutará la función consultar con el argumento 1.  t2 ejecutará la función guardar con los argumentos 1 y "Aprendiendo el uso de hilos".  t1.start() y t2.start() inician la ejecución de los hilos. Esperar a que los hilos terminen: t1.join() t2.join()  t1.join() y t2.join() aseguran que el programa principal espere hasta que ambos hilos terminen su ejecución antes de continuar. Esto es crucial para medir el tiempo transcurrido correctamente. Fin del tiempo: tiempo_fin = datetime.datetime.now()  Captura el tiempo final después de que los hilos han terminado. Cálculo del tiempo transcurrido: print("tiempo transcurrido " + str(tiempo_fin.second - tiempo_ini.second))  Calcula y muestra el tiempo transcurrido en segundos entre el inicio y el fin de la ejecución de los hilos. uso-hilos3.py demuestra cómo usar hilos para ejecutar tareas en paralelo y esperar a que terminen, lo que puede mejorar significativamente el rendimiento en comparación con la ejecución secuencial de las tareas.
  • 7. uso-hilos4.py Explicación del Código Importación de Módulos: import threading import time import datetime import logging  threading: Para trabajar con hilos.  time: Para funciones relacionadas con el tiempo, como sleep.  datetime: Para trabajar con fechas y horas.  logging: Para registrar mensajes de log, útil para depuración. Configuración del Logging: logging.basicConfig(level=logging.DEBUG, format='[%(levelname)s] (%(threadName)-s) %(message)s')
  • 8.  Configura el módulo de logging para que muestre mensajes de nivel DEBUG o superior. El formato especifica cómo se verán los mensajes de log, incluyendo el nivel de log, el nombre del hilo y el mensaje. Definición de la función consultar: def consultar(id_persona): logging.info("Consultando para el id " + str(id_persona)) time.sleep(2) return  Esta función simula una consulta para un id_persona. Registra un mensaje informativo y luego duerme el hilo durante 2 segundos. Definición de la función guardar: def guardar(id_persona, data): logging.info("Consultando para el id " + str(id_persona) + " data " + data) time.sleep(5) return  Esta función simula el guardado de datos para un id_persona con la información data. Registra un mensaje informativo y luego duerme el hilo durante 5 segundos. Registro del tiempo inicial: tiempo_ini = datetime.datetime.now()  Guarda el tiempo actual antes de iniciar los hilos. Creación de Hilos: t1 = threading.Thread(name="hilo_1", target=consultar, args=(1,)) t2 = threading.Thread(name="hilo_2", target=guardar, args=(1, "Aprendiendo el uso de hilos"))  t1: Crea un hilo llamado hilo_1 que ejecutará la función consultar con el argumento 1.  t2: Crea un hilo llamado hilo_2 que ejecutará la función guardar con los argumentos 1 y "Aprendiendo el uso de hilos". Inicio de los Hilos: t1.start() t2.start()  Inicia la ejecución de los hilos t1 y t2.
  • 9. Esperar a que los Hilos Terminen: t1.join() t2.join()  Bloquea la ejecución principal hasta que los hilos t1 y t2 hayan terminado. Registro del tiempo final: tiempo_fin = datetime.datetime.now()  Guarda el tiempo actual después de que los hilos hayan terminado. Cálculo y impresión del tiempo transcurrido: print("tiempo transcurrido " + str(tiempo_fin.second - tiempo_ini.second)) Calcula y muestra el tiempo transcurrido en segundos. Esta forma de calcular el tiempo puede ser imprecisa si la ejecución cruza un cambio de minuto.