O documento discute assincronicidade e concorrência em Python e Golang, comparando abordagens síncronas e assíncronas. Ele explica como a biblioteca asyncio do Python permite programação assíncrona e como frameworks como aiohttp podem ser usados para desenvolver aplicações web assíncronas de alto desempenho em Python.
Compile and install MongoDB v. 3.2.12 on Raspbian 32 bits with Raspberry PI 3 B+
Python e Golang - Parte 2
1. A terra prometida da assíncronicidade e da
concorrência:
Python e Golang - Parte 2
Índice:
1. Concorrência
2. Síncrono versus Assíncrono
3. Exemplos de tecnologias Síncrona e Assíncrona
4. A terra prometida da assíncronicidade e da concorrência
5. Conclusão da parte 2
1. Concorrência
“Concorrência é uma área desafiadora de desenvolvimento de software.
Décadas de pesquisa e prática levaram a uma ampla variedade de modelos
de concorrência, cada um com objetivos diferentes. A maioria centra-se em
exatidão, facilidade de uso, ou mesmo, simplicidade. Um exemplo notável
é a CSP (Comunicação de Processos Sequenciais, em que a abordagem de
concorrência de GO é aproximadamente baseada)”.
Fonte: www.python.org/dev/peps/pep-0554/
“A programação concorrente nunca foi tão importante quanto
atualmente. ...explorar os muitos processadores de um computador
moderno, que todo ano crescem em número, mas não em velocidade”.
Fonte: Donovan, pag. 291, 2017
“O asyncio é uma biblioteca do Python para escrever código concorrente
usando a sintaxe async/await. O asyncio é usado como uma base para
várias estruturas assíncronas do Python que fornecem servidores de rede e
Web de alto desempenho, bibliotecas de conexão de banco de dados, filas
de tarefas distribuídas etc. O asyncio é muitas vezes um ajuste perfeito
para código de rede estruturado de alto nível e vinculado a IO (Entrada e
Saída)”.
Fontes: https://docs.python.org/3/library/asyncio.html
https://docs.python.org/3/library/asyncio-dev.html
2. 2. Síncrono versus Assíncrono
Síncrono:
Você está em uma fila para conseguir um ingresso de cinema. Você não
pode conseguir um ingresso até que todos na frente de você recebam um, e
o mesmo se aplica às pessoas na fila atrás de você.
Assíncrono:
Você está em um restaurante “à la carte” com muitas outras pessoas. Você
pede a sua refeição. Outras pessoas também podem pedir a refeição delas,
elas não precisam esperar que a sua refeição seja preparada e servida antes
que elas possam pedir a delas. Na cozinha, os trabalhadores do restaurante
estão continuamente cozinhando, servindo e recebendo pedidos. As
pessoas receberão a refeição delas assim que a comida estiver devidamente
cozida e pronta.
Fonte: https://stackoverflow.com/questions/748175/asynchronous-vs-
synchronous-execution-what-does-it-really-mean
3. Exemplo de tecnologias Síncrona e Assíncrona
Síncrona:
Sistemas informacionais orientados a eventos do usuário que executam
uma tarefa e aguardam o retorno do resultado, bloqueando qualquer outro
evento até que a tarefa seja concluída.
Assíncrona no front-end:
Na barra de pesquisas do Google, enquanto você digita os termos, várias
sugestões de pesquisa são exibidas, esse processo é feito com programação
assíncrona (AJAX - Asynchronous Javascript and XML).
Assíncrona no back-end:
a) Filas de tarefas assíncronas com sistemas Brokers, b) Frameworks
nativamente assíncronos (tornado, aiohttp, NodeJS), bibliotecas
assíncronas (asyncio)
4. A terra prometida da assíncronicidade e da concorrência
3. Por que a assíncronicidade é importante? Porque um processo assíncrono
não é blocante como ocorre no processo síncrono, ou seja, enquanto a
tarefa não terminar o processo síncrono não pode passar para a tarefa
seguinte. Porém, o processo síncrono é a opção correta quando a
sincronicidade dos dados é uma questão fundamental.
Quais são as tarefas que executadas de forma assíncrona oferecem um
melhor desempenho computacional no ambiente da tecnologia da
informação? a) Envio de e-mails, b) geração de relatórios complexos, c)
processamento de vídeo e imagem, d) comunicação com APIs de terceiros
(Spotify, Linkedin, Twitter, Instagram), gravação de blocos de dados em
disco/ssd com checagem de sucesso assíncrona(tabela abaixo),
Bloco de DB gravado síncrono Bloco de DB gravado assíncrono
for i in 1 .. 100
loop
write block X to disk and wait for the OS to tell
us the operation is totally complete (the block is
not buffered by the OS or anything, it is on disk)
end loop
for i in 1 .. 100
loop
write block X and return immediately, don't wait
end loop
now wait for the 100 blocks to "call back" to us, let
the OS do its work and wait.
Fonte: https://asktom.oracle.com/pls/asktom/f?
p=100:11:::::P11_QUESTION_ID:1257800375707
“O Python não era assíncrono nas primeiras versões. Na versão 3.5, o
recurso assíncrono do Python se tornou estável com a biblioteca nativa
asyncio. Na versão 3.7, essa biblioteca recebeu um grande conjunto de
melhorias e se tornou muito simples no trato para com o desenvolvimento.
Atualmente o Python está na versão 3.8
Nós temos o Django (Framework Web FullStack) e o Flask
(Microframework Web), mas eles não suportam o paradigma assíncrono
nativamente e para isso contam com o framework Celery (Fila de tarefas
assíncronas) e Flower (Monitor em tempo real e Web Admin para Celery).
O framework aiohttp é construído sobre a biblioteca nativa asyncio do
Python e os programadores de Python não precisam mais se arrepender de
não termos nenhum recurso como o NodeJS. Agora temos isso e tem
melhor desempenho que o NodeJS. O NodeJS é uma ótima plataforma,
mas se você for programador Python e não quiser mudar de Python para
JavaScript/NodeJS, então o framework aiohttp é a resposta correta para
você.”
4. Fonte: http://www.discoversdk.com/blog/asynchronous-python-web-
applications-with-aiohttp
Importante destacar, em inglês, os seguintes parágrafos:
“NodeJS is suitable only for async non blocking interaction e.g. with
MongoDb. Don't use it with RDBMS”
Fonte: https://stackoverflow.com/questions/18376042/are-relational-
databases-a-poor-fit-for-node-js/39323415#39323415
aiopg is a library for accessing a PostgreSQL database from the asyncio
(PEP-3156/tulip) framework. It wraps asynchronous features of the
Psycopg database driver.
Fonte: https://aiopg.readthedocs.io/en/stable/
5. Conclusão da parte 2
Algumas tecnologias estão mais alinhadas com os seus respectivos
“matchs” tecnológicos (Nginx/uWSGI/Django com PostgreSQL,
Nginx/NodeJS com MongoDB (NoSQL DB), Nginx/asyncio com
PostgreSQL/aiopg, Nginx/aiohttp com PostgreSQL/aiopg, Tornado com
Websockets e NoSQL DBs). Cada produto open-source, citado aqui, está
evoluindo fortemente pelo esforço dos membros das suas respectivas
comunidades, gerando, inclusive, novos produtos por meio dos forks. Os
“matchs” citados são usos comuns, não é uma regra, e podem variar,
principalmente com a maturidade dos produtos. Criatividade e inovação
em software e processos.
Bibliografia:
Donovan, Alan A. A.; Kernighan, Brian W.; Tradução: Lúcia A. Kinoshita,
A Linguagem de Programação Go, Editora Novatec, 2017
Gostou? Dê um like! Fique a vontade em compartilhar e usar no seu estudo de
caso. Apenas informe a fonte. Obrigado e sucesso!
Ahhh eu tenho uma lista de desejo na Amazon:
I have a wishlist at Amazon