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# Simular con hilos un sistema de reservación de vuelos. Las personas pueden consultar y reservar vuelos.
# Hacer la sincronización con múltiples personas accediendo al registro de vuelos.
# Cuando se reserva no se puede consultar y viceversa. Lanzar 20 hilos
# 1000 lugares en el avion.
from Buffer import Vuelo #<-- Buffer, Ev_lector y Ev_escritor son los nombres de los modulos
from Ev_lector import Consulta
from Ev_escritor import Reserva
cant_asi=1000
cant_consultas=20
cant_reservas=20
vuelo = Vuelo(cant_asi)
lector = Consulta("Consulta", vuelo, cant_consultas)
escritor = Reserva("Reserva", vuelo, cant_reservas)
lector.start()
escritor.start()
lector.join()
escritor.join()
asi_oc=vuelo.get()
print("Lista final de asienos reservados:\n{0}".format(str(asi_oc)))
Código Python:
Ver originalimport threading
class Vuelo:
def __init__(self, cant):
self.vuelo = []
self.cant=cant
for v in range(1,self.cant+1):
self.vuelo.append(v)
#print(str(self.vuelo)) <--- Era para verificar el armado de la lista de asientos
self.ocup=[]
def set(self,asiento):
self.ocup.append(asiento)
self.vuelo.remove(asiento)
def get(self):
asi_oc=self.ocup
asi_oc.sort()
return asi_oc
def get_cant(self):
par=self.cant
return par
Código Python:
Ver originalimport threading
import random
import time
class Reserva(threading.Thread):
def __init__(self, nombreHilo, asientos, cant):
threading.Thread.__init__(self, name=nombreHilo)
self.cant=cant
self.asientos=asientos
def run(self):
#Reserva
for i in range(self.cant):
time.sleep(random.randrange(5))
a=random.randint(1,self.asientos.get_cant())
while (self.asientos.vuelo.count(a)==0):
a=random.randint(1,self.asientos.get_cant())
self.asientos.set(a)
print ("El hilo "+str(self.name)+" reserva el asiento "+ str(a))
Código Python:
Ver originalimport threading
import random
import time
class Consulta(threading.Thread):
def __init__(self, nombreHilo, asientos, cant):
threading.Thread.__init__(self, name = nombreHilo)
self.cant=cant
self.asientos=asientos
def run(self):
for i in range(self.cant):
time.sleep(random.randrange(5))
asi_oc=self.asientos.get()
print("El hilo {1} consulta la lista de asientos ocupados y es la siguiente: \n {0} \n".format(str(asi_oc), str(self.name)))