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.

Producer put 1

Consumer got 1

Producer put 2

Consumer got 2

Producer done

A classe Queue pode também acompanhar o progresso do trabalho empregando

o método task_done. Isso permite que o processamento espere pelo

esvaziamento da fila de entrada e elimina a necessidade de consultar

periodicamente a lista done_queue no fim da pipeline. Por exemplo, o código a

seguir define uma thread consumidora que chama task_done quando termina de

processar um item.

in_queue = Queue()

def consumer():

print('Consumer waiting')

work = in_queue.get() # Segunda a ser executada

print('Consumer working')

# Trabalhando

# ...

print('Consumer done')

in_queue.task_done() # Terceira a ser executada

Thread(target=consumer).start()

Agora, o código produtor não precisa se conectar diretamente à thread

consumidora nas consultas, bastando que o produtor espere que in_queue

termine e chame join na instância de Queue. Mesmo depois de esvaziada, a fila

in_queue não estará liberada até que task_done tenha sido chamada para todo e

qualquer item que tenha sido posto na fila.

in_queue.put(object()) # Executada primeiro

print('Producer waiting')

in_queue.join() # Quarta a ser executada

print('Producer done')

>>>

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!