(Parte 3) Threads - Executando processamentos em paralelo

This commit is contained in:
Luiz Otávio
2023-02-15 16:18:16 -03:00
parent 50810f471c
commit f7ce97123a

View File

@@ -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)