import time import random import threading # Pasos totales de la carrera pasos_finales = 1000 # 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 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 pasos_finales > pasos_realizados: pasos_realizados = andar(pasos_realizados) print(f"\rProgreso del camello {i}: {pasos_realizados}", end="\r", flush=True) # Registramos el tiempo de finalización 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"El 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