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

while True:

self.polled_count += 1

try:

item = self.in_queue.get()

except IndexError:

sleep(0.01) # Nenhum trabalho a fazer

else:

result = self.func(item)

self.out_queue.put(result)

self.work_done += 1

Agora podemos conectar as três fases juntas, criando as filas para seus pontos de

coordenação e as threads de trabalho correspondentes.

download_queue = MyQueue()

resize_queue = MyQueue()

upload_queue = MyQueue()

done_queue = MyQueue()

threads = [

Worker(download, download_queue, resize_queue),

Worker(resize, resize_queue, upload_queue),

Worker(upload, upload_queue, done_queue),

]

Podemos iniciar as threads e, depois, injetar certa quantidade de trabalho na

primeira fase da pipeline. No exemplo de código a seguir, usamos uma instância

simples de object como um substituto improvisado para os dados verdadeiros

que a função download está esperando.

for thread in threads:

thread.start()

for _ in range(1000):

download_queue.put(object())

Agora, esperamos que todos os itens sejam processados pela pipeline até que

tudo acabe indo parar na fila done_queue.

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!