Apêndice C. Algo completamente diferente: Async
Os nossos dois primeiros apêndices destinavam-se a programadores principiantes, mas este é para aqueles que estão um pouco mais avançados.
Tal como a maioria das linguagens de programação, o Python tem sido síncrono. Percorre o código linearmente, uma linha de cada vez, de cima para baixo. Quando chamas uma função, o Python salta para o seu código, e o chamador espera até que a função regresse antes de retomar o que estava a fazer.
A tua CPU só pode fazer uma coisa de cada vez, pelo que a execução síncrona faz todo o sentido. Mas acontece que, muitas vezes, um programa não está realmente a executar qualquer código, mas sim à espera de algo, como dados de um ficheiro ou de um serviço de rede. É como se estivéssemos a olhar para o ecrã de um browser enquanto esperamos que um site carregue. Se pudéssemos evitar esta "espera ocupada", poderíamos encurtar o tempo total dos nossos programas. A isto também se chama melhorar o rendimento.
No Capítulo 15, viste que se quiseres alguma concorrência, as tuas escolhas incluem threads, processos, ou uma solução de terceiros como gevent ou twisted. Mas existe agora um número crescente de respostas assíncronas, tanto integradas no Python como em soluções de terceiros. Estas coexistem com o código Python síncrono habitual, mas, para usar um aviso dos Ghostbusters, não podes atravessar os streams. Vou mostrar-te como evitar quaisquer efeitos secundários ectoplásmicos.
Corrotinas e loops de eventos ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access