15.12.2022 Views

Python Eficaz

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

programa estará repleta. Nesse momento, o programa travará de forma

espetacular.

A lição a aprender aqui é que as pipelines não são ruins em si, mas é muito

difícil construir você mesmo uma fila produtor-consumidor decente.

Chamem a cavalaria, digo, a classe Queue

A classe Queue, do módulo nativo queue, oferece toda a funcionalidade de que

precisamos para resolver todos esses problemas.

Queue elimina a espera nas filas (busy waiting) das threads de trabalho ao fazer

com que o método get fique bloqueado enquanto não existam dados a processar

na fila de entrada. Por exemplo, o código inicia uma thread que espera dados em

uma fila de entrada:

from queue import Queue

queue = Queue()

def consumer():

print('Consumer waiting')

queue.get() # Só é executada depois no put() mais

# adiante no código

print('Consumer done')

thread = Thread(target=consumer)

thread.start()

Mesmo que a thread tenha sido iniciada primeiro, não será finalizada até que um

item seja colocado (put) na instância de Queue, ou seja, a thread só prosseguirá

quando o método get tenha algo para devolver.

print('Producer putting')

queue.put(object()) # Roda antes do get() que está lá no

# início do código

thread.join()

print('Producer done')

>>>

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!