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
64 lines
2.6 KiB
11 months ago
|
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
|