Ver Mensaje Individual
  #3 (permalink)  
Antiguo 16/05/2015, 13:52
pabloryser
 
Fecha de Ingreso: mayo-2015
Mensajes: 15
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Problema con hilos

Ahora si, funcionando.
No se si estará bien implementado el tema de los hilos, pero funciona bien.
Se los dejo por si a alguien le sirve.
Si alguien tiene algo mas para aportar bienvenido sea!!
Gracias por leer esto jeje.

Código Python:
Ver original
  1. # Simular con hilos un sistema de reservación de vuelos. Las personas pueden consultar y reservar vuelos.
  2. # Hacer la sincronización con múltiples personas accediendo al registro de vuelos.
  3. # Cuando se reserva no se puede consultar y viceversa. Lanzar 20 hilos
  4. # 1000 lugares en el avion.
  5.  
  6. from Buffer import Vuelo                    #<-- Buffer, Ev_lector y Ev_escritor son los nombres de los modulos
  7. from Ev_lector import Consulta
  8. from Ev_escritor import Reserva
  9.  
  10. cant_asi=1000
  11. cant_consultas=20
  12. cant_reservas=20
  13. vuelo = Vuelo(cant_asi)            
  14. lector = Consulta("Consulta", vuelo, cant_consultas)
  15. escritor = Reserva("Reserva", vuelo, cant_reservas)
  16.  
  17. lector.start()
  18. escritor.start()
  19.  
  20. lector.join()
  21. escritor.join()
  22.  
  23. asi_oc=vuelo.get()
  24. print("Lista final de asienos reservados:\n{0}".format(str(asi_oc)))

Código Python:
Ver original
  1. import threading
  2.  
  3. class Vuelo:
  4.  
  5.     def __init__(self, cant):
  6.         self.vuelo = []
  7.         self.cant=cant
  8.         for v in range(1,self.cant+1):
  9.             self.vuelo.append(v)
  10.         #print(str(self.vuelo)) <--- Era para verificar el armado de la lista de asientos
  11.         self.ocup=[]
  12.                    
  13.     def set(self,asiento):
  14.         self.ocup.append(asiento)
  15.         self.vuelo.remove(asiento)
  16.     def get(self):
  17.         asi_oc=self.ocup
  18.         asi_oc.sort()
  19.         return asi_oc
  20.     def get_cant(self):
  21.         par=self.cant
  22.         return par

Código Python:
Ver original
  1. import threading
  2. import random
  3. import time
  4.  
  5. class Reserva(threading.Thread):
  6.    
  7.     def __init__(self, nombreHilo, asientos, cant):
  8.  
  9.         threading.Thread.__init__(self, name=nombreHilo)
  10.         self.cant=cant
  11.         self.asientos=asientos
  12.        
  13.     def run(self):
  14.         #Reserva
  15.         for i in range(self.cant):
  16.             time.sleep(random.randrange(5))
  17.             a=random.randint(1,self.asientos.get_cant())
  18.             while (self.asientos.vuelo.count(a)==0):
  19.                 a=random.randint(1,self.asientos.get_cant())
  20.             self.asientos.set(a)
  21.             print ("El hilo "+str(self.name)+" reserva el asiento "+ str(a))

Código Python:
Ver original
  1. import threading
  2. import random
  3. import time
  4.  
  5. class Consulta(threading.Thread):
  6.    
  7.     def __init__(self, nombreHilo, asientos, cant):
  8.  
  9.         threading.Thread.__init__(self, name = nombreHilo)
  10.         self.cant=cant
  11.         self.asientos=asientos
  12.                
  13.     def run(self):
  14.                
  15.         for i in range(self.cant):
  16.             time.sleep(random.randrange(5))
  17.             asi_oc=self.asientos.get()
  18.             print("El hilo {1} consulta la lista de asientos ocupados y es la siguiente: \n {0} \n".format(str(asi_oc), str(self.name)))