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

master
Nolete19 11 months ago
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…
Cancel
Save

Powered by INFORMATICA.FP.EDU.ES.