Sin hilos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import time def descargar_archivo(nombre, duracion): print(f"Iniciando descarga de {nombre}...") time.sleep(duracion) # Simula el tiempo de descarga print(f"{nombre} descargado en {duracion} segundos.") def ejecutar_sin_hilos(): tiempo_inicio = time.time() descargar_archivo("Archivo 1", 2) descargar_archivo("Archivo 2", 2) descargar_archivo("Archivo 3", 2) tiempo_fin = time.time() print(f"Tiempo total sin hilos: {tiempo_fin - tiempo_inicio} segundos") # Ejecutar la función sin hilos ejecutar_sin_hilos() |
Con 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 def descargar_archivo(nombre, duracion): print(f"Iniciando descarga de {nombre}...") time.sleep(duracion) # Simula el tiempo de descarga print(f"{nombre} descargado en {duracion} segundos.") def ejecutar_con_hilos(): tiempo_inicio = time.time() # Crear hilos para cada tarea hilos = [] hilos.append(threading.Thread(target=descargar_archivo, args=("Archivo 1", 2))) hilos.append(threading.Thread(target=descargar_archivo, args=("Archivo 2", 2))) hilos.append(threading.Thread(target=descargar_archivo, args=("Archivo 3", 2))) # Iniciar los hilos for hilo in hilos: hilo.start() # Esperar que todos los hilos terminen for hilo in hilos: hilo.join() tiempo_fin = time.time() print(f"Tiempo total con hilos: {tiempo_fin - tiempo_inicio} segundos") # Ejecutar la función con hilos ejecutar_con_hilos() |
Explicación y resultados
- Sin hilos:
- Cada archivo se descarga uno después del otro. Si cada descarga tarda 2 segundos, el tiempo total será aproximadamente 6 segundos (2 + 2 + 2).
- Con hilos:
- Todas las descargas se inician casi simultáneamente, por lo que deberían completarse en aproximadamente 2 segundos, en lugar de 6.