You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
2.6 KiB

import time
import random
import threading
# Pasos totales de la carrera
pasos_finales = 1000
# Caracteres que tiene que mostrar totales
barras_finales = 20
# Creamos la barrera para decir que hasta que no estén los 6 hilos la carrera no empieza.
barrera = threading.Barrier(6)
# Creamos un candado para controlar el acceso a la hora de imprimir los resultados finales.
lock = threading.Lock()
# Creamos un diccionario para almacenar los tiempos de cada camello.
tiempos = {}
def inscribirse_carrera(i):
global pasos_finales
pasos_realizados = 0 # Pasos que ha realizado cada camello
barras_realizadas = 0 # Barras de progreso que se muestran
print(f"El camello {i} se ha apuntado a la carrera")
barrera.wait() # Hasta que no esten los 6 camellos no empiezan conjuntamente
print(f"El camello {i} ha EMPEZADO")
# Registramos el tiempo de inicio
inicio = time.time()
while barras_finales > barras_realizadas:
pasos_realizados = andar(pasos_realizados)
barras_realizadas = pasos_realizados // 50 # Division, ya que 20 simbolos representan 1000 pasos totales
print(f"\rProgreso del camello {i}: {'#' * barras_realizadas}", end="\r", flush=True)
# Registramos el tiempo cuando el camello finaliza la carrera
fin = time.time()
# Guardamos el tiempo que tardó este camello
tiempos[i] = fin - inicio
# Verificamos si todos los camellos han terminado
with lock:
if len(tiempos) == 6: #Si la longitud de tiempos es igual a 6 camellos imprime el resultado.
# Imprimimos la clasificacion final junto con sus tiempos
print("==================================================")
print("| CLASIFICACION |")
print("==================================================")
# Iteramos sobre los items del diccionario de los tiempos de cada camello
for i, tiempo in tiempos.items():
print(f"\nEl camello {i} ha FINALIZADO. Tiempo: {tiempo:.2f} segundos")
def andar(pasos_realizados):
time.sleep(0.05) # Establecemos un pequeño retroceso al programa, para que no sea tan rapido
pasos_random = random.randint(1, 10) # Genaramos un numero aleatorio de pasos entre 1 y 10
pasos_realizados = pasos_realizados + pasos_random
return pasos_realizados # Devolvemos los pasos realizados por cada camello
for x in range(6):
t = threading.Thread(target=inscribirse_carrera, args=(x+1,)) # Creamos los hilos asignandole la funcion de inscribirse en la carrera
t.start() # Iniciamos todos los hilos

Powered by INFORMATICA.FP.EDU.ES.