15.12.2022 Views

Python Eficaz

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

# ...

def run(self):

for item in self.in_queue:

result = self.func(item)

self.out_queue.put(result)

No exemplo de código a seguir, recriamos o conjunto de threads de trabalho

usando a nova classe de trabalho:

download_queue = ClosableQueue()

# ...

threads = [

StoppableWorker(download, download_queue, resize_queue),

# ...

]

Depois de executar as threads de trabalho como antes, também enviamos o sinal

de encerramento logo após todos os dados de entrada terem sido injetados, e

fechamos a fila de entrada da primeira fase.

for thread in threads:

thread.start()

for _ in range(1000):

download_queue.put(object())

download_queue.close()

Finalmente, esperamos pelo término do trabalho unindo as filas que conectam as

fases. Cada vez que uma fase termina, é enviado um sinalizador para a próxima

fase fechando sua fila de entrada. No final, a fila done_queue contém todos os

objetos de saída, como esperado.

download_queue.join()

resize_queue.close()

resize_queue.join()

upload_queue.close()

upload_queue.join()

print(done_queue.qsize(), 'items finished')

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!