Juanjo, he realizado dos versiones, una con una barra de progreso y otro directamente con los pasos realizados, el unico fallo es que a la hora de mostrarlo lo duplica todo el rato y no se como corregirlo... Toso el trabajo esta explicado en el interior con comentarios de manera ordenada y sencilla
commit
724f56b7b8
@ -0,0 +1,63 @@
|
||||
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
|
@ -0,0 +1,59 @@
|
||||
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
|
Loading…
Reference in new issue