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

Lo hice... CASI!!!
Está separado en clases y funcionando mas o menos.
Hice el avión mas chico para verificar datos repetidos que deberían obviarse con un while en la linea 18 de la clase reserva.
El tema es que Reserva el asiento 15 por ejemplo y en la lista de ocupados me guarda un 16, y a partir de ahi todos los numeros tienen una pequeña variación, no se cual podría ser el problema (Clase vuelo linea 13).

Ayuda por favor, he plantado culo en asiento y avancé bastante, pero parece que "ALGO" no estoy viendo bien.

Desde ya muchas gracias.

Edito: Ya di con el error. En la linea 13 de la clase Vuelo paso a la nueva lista el orden del valor y no el valor en si y difieren en primera instancia en 1 (aumenta a medida q voy sacando). Todavia tengo que resolverlo.

Código Python(main):
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 modulos
  7. from Ev_lector import Consulta
  8. from Ev_escritor import Reserva
  9.  
  10. vuelo = Vuelo()            
  11. lector = Consulta("Consulta", vuelo, 20)
  12. escritor = Reserva("Reserva", vuelo, 20)
  13.  
  14. lector.start()
  15. escritor.start()
  16.  
  17. lector.join()
  18. escritor.join()

Código Python(Clase Reserva):
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(3))
  17.             a=random.randint(1,100)
  18.             while (self.asientos.vuelo.count(a)==0):
  19.                 a=random.randint(1,100)
  20.             self.asientos.set(a)
  21.             print ("El hilo "+str(self.name)+" reserva el asiento "+ str(a))

Código Python(Clase Consulta):
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(3))
  17.             #a=self.asientos.ocup
  18.            
  19.             print("La lista de asientos ocupados es la siguiente: \n" + str(self.asientos.get())+"\n")

Código Python(Clase Vuelo):
Ver original
  1. import threading
  2.  
  3. class Vuelo:
  4.  
  5.     def __init__(self):
  6.         self.vuelo = []
  7.         for v in range(1,101):
  8.             self.vuelo.append(v)
  9.         print(str(self.vuelo))
  10.         self.ocup=[]
  11.                    
  12.     def set(self,asiento):
  13.         self.ocup.append(self.vuelo.pop(asiento))
  14.        
  15.     def get(self):
  16.         asi_oc=self.ocup
  17.         return asi_oc

Última edición por pabloryser; 16/05/2015 a las 08:29 Razón: Error detectado