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.

>>>

1000 items finished

Lembre-se

• Pipelines são uma excelente maneira de organizar sequências de trabalho que

rodam de forma simultânea (em concorrência) usando múltiplas threads do

Python.

• Esteja ciente dos muitos problemas envolvendo pipelines concorrentes: busy

waiting, threads de trabalho erráticas e explosão no uso de memória.

• A classe Queue tem todos os recursos necessários para construir pipelines

robustas: operações de bloqueio, tamanho de buffer e união de filas.

Item 40: Considere usar corrotinas para rodar muitas

funções simultaneamente

As threads dão aos programadores do Python uma maneira de executar múltiplas

funções aparentemente ao mesmo tempo (consulte o Item 37: “Use threads para

bloquear I/O e evitar paralelismo”). Mas há três grandes problemas com as

threads:

• Requerem ferramentas especiais para coordenar entre elas o trabalho de

forma que uma não interfira com a outra (consulte o Item 38: “Use Lock para

evitar que as threads iniciem condições de corrida nos dados” e o Item 39:

“Use Queue para coordenar o trabalho entre as threads”). Isso torna o código

que usa threads muito mais difícil de entender que um código procedural, de

apenas uma thread. Essa complexidade torna o código com threads também

difícil de estender e manter ao longo do tempo.

• Requerem muita memória, em torno de 8 MB por thread. Na maioria dos

computadores, essa quantidade de memória não é relevante se o programa

dispara uma ou duas dezenas de threads. Contudo, e se um determinado

programa disparar não dezenas, mas centenas de funções

“simultaneamente”? Essas funções podem corresponder a solicitações dos

usuários a um servidor, pixels na tela, partículas em uma simulação etc.

Executar uma thread exclusiva para cada atividade única simplesmente não

funciona.

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!