Contenidos
- Tablas de multiplicar en Python sin hilos
- Tablas de multiplicar en Python con hilos (sin controlar la escritura por Consola pero sí controlando la ejecución de los hilos)
- Tablas de multiplicar en Python con hilos (controlando la escritura por Consola y controlando la ejecución de los hilos)
- Solución en la que los resultados se acumulen en un buffer y luego se impriman todos de una vez para evitar problemas de bloqueo y mezcla de salida
Tablas de multiplicar en Python sin hilos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import time def imprimir_tablas(): for i in range(0, 11): # Tablas del 0 al 10 print(f"Tabla del {i}") for j in range(0, 11): # Multiplicación del 0 al 10 print(f"{i} x {j} = {i * j}") print("-" * 20) # Separador entre tablas if __name__ == "__main__": inicio = time.time() # Inicia el cronómetro imprimir_tablas() fin = time.time() # Finaliza el cronómetro tiempo_total = fin - inicio print(f"Tiempo total de ejecución: {tiempo_total:.6f} segundos") |
Tablas de multiplicar en Python con hilos (sin controlar la escritura por Consola pero sí controlando la ejecución de los hilos)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import time import threading # Función que imprime la tabla de multiplicar de un número específico def imprimir_tabla(n): print(f"Tabla del {n}") for j in range(0, 11): print(f"{n} x {j} = {n * j}") print("-" * 20) if __name__ == "__main__": inicio = time.time() # Inicia el cronómetro # Lista para almacenar los hilos hilos = [] # Crear un hilo para cada tabla de multiplicar del 0 al 10 for i in range(0, 11): hilo = threading.Thread(target=imprimir_tabla, args=(i,)) hilos.append(hilo) hilo.start() # Inicia el hilo # Esperar a que todos los hilos terminen for hilo in hilos: hilo.join() fin = time.time() # Finaliza el cronómetro tiempo_total = fin - inicio print(f"Tiempo total de ejecución con hilos: {tiempo_total:.6f} segundos") |
Tablas de multiplicar en Python con hilos (controlando la escritura por Consola y controlando la ejecución de los hilos)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
import time import threading # Crear un objeto Lock para sincronizar la impresión lock = threading.Lock() # Función que imprime la tabla de multiplicar de un número específico def imprimir_tabla(n): with lock: # Adquirir el lock antes de imprimir print(f"Tabla del {n}") for j in range(0, 11): print(f"{n} x {j} = {n * j}") print("-" * 20) if __name__ == "__main__": inicio = time.time() # Inicia el cronómetro # Lista para almacenar los hilos hilos = [] # Crear un hilo para cada tabla de multiplicar del 0 al 10 for i in range(0, 11): hilo = threading.Thread(target=imprimir_tabla, args=(i,)) hilos.append(hilo) hilo.start() # Inicia el hilo # Esperar a que todos los hilos terminen for hilo in hilos: hilo.join() fin = time.time() # Finaliza el cronómetro tiempo_total = fin - inicio print(f"Tiempo total de ejecución con hilos: {tiempo_total:.6f} segundos") |
Solución en la que los resultados se acumulen en un buffer y luego se impriman todos de una vez para evitar problemas de bloqueo y mezcla de salida
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
import time import threading import queue # Crear una cola para acumular las salidas de los hilos cola_salida = queue.Queue() # Función que imprime la tabla de multiplicar de un número específico def imprimir_tabla(n): salida = [f"Tabla del {n}\n"] for j in range(0, 11): salida.append(f"{n} x {j} = {n * j}\n") salida.append("-" * 20 + "\n") cola_salida.put("".join(salida)) # Enviar el resultado a la cola # Función para imprimir el contenido de la cola def imprimir_resultados(): while not cola_salida.empty(): print(cola_salida.get(), end='') if __name__ == "__main__": inicio = time.time() # Inicia el cronómetro # Lista para almacenar los hilos hilos = [] # Crear un hilo para cada tabla de multiplicar del 0 al 10 for i in range(0, 11): hilo = threading.Thread(target=imprimir_tabla, args=(i,)) hilos.append(hilo) hilo.start() # Inicia el hilo # Esperar a que todos los hilos terminen for hilo in hilos: hilo.join() # Imprimir todos los resultados acumulados imprimir_resultados() fin = time.time() # Finaliza el cronómetro tiempo_total = fin - inicio print(f"\nTiempo total de ejecución con hilos: {tiempo_total:.6f} segundos") |