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.

• Threads são ávidas consumidoras de recursos da máquina quando estão sendo

inicializadas. Se o programa, em vez de trabalhar com as mesmas threads do

começo ao fim, fica o tempo todo criando e encerrando funções concorrentes,

acaba gerando um processamento adicional espúrio (overhead) que não é

desprezível. Esse overhead, à medida que o número de threads aumenta,

também cresce e torna o conjunto todo mais lento.

O Python consegue contornar todos esses problemas com o uso das corrotinas,

ou coroutines. As corrotinas permitem iniciar funções aparentemente

simultâneas nos programas em Python. Elas foram implementadas como uma

extensão dos geradores (consulte o Item 16: “Prefira geradores em vez de

retornar listas”). O custo de iniciar uma corrotina geradora é o de uma chamada

a função. Uma vez ativa, cada corrotina usa menos de 1 KB de memória durante

toda a sua vida útil.

As corrotinas permitem que o código que consome um gerador envie (coma

função send) um valor de retorno para essa mesma função geradora depois de

cada expressão yield. A função geradora recebe o valor passado pela função send

como resultado da expressão yield correspondente.

def my_coroutine():

while True:

received = yield

print('Received:', received)

it = my_coroutine()

next(it) # Inicializa a corrotina

it.send('First')

it.send('Second')

>>>

Received: First

Received: Second

A chamada inicial a next é necessária para preparar o gerador para receber o

primeiro send. Essa preparação se dá avançando-o para a primeira expressão

yield. Juntos, yield e send dão aos geradores uma maneira padrão de variar, em

resposta a um estímulo externo, o próximo valor gerado por yield.

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!