From f7ce97123abba186ee3566e28ab84d48205ee273 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luiz=20Ot=C3=A1vio?= Date: Wed, 15 Feb 2023 16:18:16 -0300 Subject: [PATCH] (Parte 3) Threads - Executando processamentos em paralelo --- aula196.py | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 71 insertions(+), 4 deletions(-) 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)