Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/05/2015, 12:19
pabloryser
 
Fecha de Ingreso: mayo-2015
Mensajes: 15
Antigüedad: 9 años, 6 meses
Puntos: 0
Sonrisa Problema con hilos

Hola a todos. Estoy comenzando con Python, haciendo un curso, en el que nos han dado un problema.
Mi problema es que no termino de entender hilos y lo poco que encuentro dando vueltas está en inglés.
Tengo la idea de como hacer funcionar el programa. mi problema es la implementación de hilos "Threads".
Queria ver si podian darme una mano. Les muestro lo que tengo.
Entre las lineas 57 y 60 estaria mi problema, el buffer.
Y en la consulta de vuelos "lector" tenia pensado hacer 2 listas: Una para reservas, con los 1000 asientos con booleanos y otra solo con los asientos reservados. Que no lo hice todavia, me importa mas el buffer.
Agradecería mucho ayuda

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. import threading
  7. import random
  8. import time
  9.  
  10. class Reserva(threading.Thread):
  11.    
  12.     def __init__(self, nombreHilo, asientos, condicion, cant):
  13.  
  14.         threading.Thread.__init__(self, name = nombreHilo)
  15.         self.cant=cant
  16.         self.condicion=condicion
  17.         self.asientos=asientos
  18.        
  19.     def run(self):
  20.         #Reserva
  21.        
  22.         for i in range(self.cant):
  23.             self.condicion.acquire()
  24.             time.sleep(random.randrange(5))
  25.             a=random.randint(1,1000)-1
  26.             self.asientos[a]=False
  27.            
  28.             print ("Se reservó el asiento "+ str(a))
  29.        
  30.         self.condicion.notify()
  31.         self.condicion.release()
  32.         time.sleep(random.randrange(2))
  33.  
  34. class Consulta(threading.Thread):
  35.    
  36.     def __init__(self, nombreHilo, asientos, condicion, cant):
  37.  
  38.         threading.Thread.__init__(self, name = nombreHilo)
  39.         self.cant=cant
  40.         self.condicion=condicion
  41.         self.asientos=asientos
  42.                
  43.     def run(self):
  44.         self.condicion.acquire()
  45.        
  46.         asientos2=self.asientos
  47.         print("prueba")
  48.        
  49.         list.count(x)  #asientos disponibles
  50.                
  51.         time.sleep(random.randrange(2))
  52.         self.condicion.wait()
  53.         self.condicion.release()
  54.  
  55. condicion = threading.Condition()
  56. asi_vuelo = []
  57. for v in range(1000):           #Armando el avion
  58.     asi_vuelo.append(True)
  59.  
  60. #vuelo = BufferCircular()               #Aca está mi problema
  61. lector = Consulta("Consulta", asi_vuelo, condicion, 20)
  62. escritor = Reserva("Reserva", asi_vuelo, condicion, 20)
  63.  
  64. lector.start()
  65. escritor.start()
  66.  
  67. lector.join()
  68. escritor.join()

Última edición por pabloryser; 15/05/2015 a las 12:50 Razón: Edito. Olvide el enunciado