diff --git a/aula196.py b/aula196.py index d340fe1..7dea5eb 100644 --- a/aula196.py +++ b/aula196.py @@ -1,6 +1,6 @@ -# (Parte 2) Threads - Executando processamentos em paralelo +# (Parte 3) Threads - Executando processamentos em paralelo -from threading import Thread +from threading import Lock, Thread from time import sleep """ @@ -30,8 +30,8 @@ for i in range(20): sleep(1) """ - -def vai_demorar(texto: str, tempo: int): +""" +def vai_demorar(texto, tempo): sleep(tempo) print(texto) @@ -48,3 +48,70 @@ t3.start() for i in range(20): print(i) sleep(.5) +""" + + +""" +def vai_demorar(texto, tempo): + sleep(tempo) + print(texto) + + +t1 = Thread(target=vai_demorar, args=('Olá mundo 1!', 10)) +t1.start() +t1.join() + +print('Thread acabou!') +""" + + +class Ingressos: + """ + Classe que vende ingressos + """ + + def __init__(self, estoque: int): + """ Inicializando... + + :param estoque: quantidade de ingressos em estoque + """ + self.estoque = estoque + # Nosso cadeado + self.lock = Lock() + + def comprar(self, quantidade: int): + """ + Compra determinada quantidade de ingressos + + :param quantidade: A quantidade de ingressos que deseja comprar + :type quantidade: int + :return: Nada + :rtype: None + """ + # Tranca o método + self.lock.acquire() + + if self.estoque < quantidade: + print('Não temos ingressos suficientes.') + # Libera o método + self.lock.release() + return + + sleep(1) + + self.estoque -= quantidade + print(f'Você comprou {quantidade} ingresso(s). ' + f'Ainda temos {self.estoque} em estoque.') + + # Libera o método + self.lock.release() + + +if __name__ == '__main__': + ingressos = Ingressos(10) + + for i in range(1, 20): + t = Thread(target=ingressos.comprar, args=(i,)) + t.start() + + print(ingressos.estoque)