unb-mds /
2024-1-MinasDeCultura
Minas de Cultura: Um repositório dedicado a consultar gastos culturais do estado de Minas Gerais. Links da landingpage do projeto Minas de Cultura:https://unb-mds.github.io/2024-1-MinasDeCultura/landingpage/index.html
Loading repository data…
lvgalvao / repository
Um repositório dedicado à comparação e análise aprofundada das bibliotecas de requisições HTTP mais populares em Python: requests, aiohttp e httpx.
Este projeto visa comparar diferentes bibliotecas HTTP em Python em termos de desempenho (tempo de execução) e uso de memória. As bibliotecas testadas incluem requests, httpx (com e sem sessões), e aiohttp.
O principal objetivo deste projeto é fornecer insights práticos sobre o desempenho de várias bibliotecas HTTP populares em Python. Isso pode ajudar desenvolvedores a escolher a biblioteca mais adequada para suas necessidades específicas, levando em conta não apenas a facilidade de uso, mas também a eficiência em termos de tempo de resposta e consumo de memória.
requests: Uma biblioteca HTTP simples, porém poderosa.httpx: Uma biblioteca HTTP de próxima geração, com suporte para HTTP/1.1 e HTTP/2.aiohttp: Uma biblioteca HTTP assíncrona.Cada biblioteca foi utilizada para fazer requisições GET a um servidor de teste. Foram medidos o tempo de execução e o uso de memória para as seguintes abordagens:
usando_request (lib_request):
requests de maneira síncrona e sem sessão para realizar requisições HTTP GET.usando_request_session (lib_request_session):
usando_request, mas utiliza a biblioteca requests com sessões.usando_httpx (lib_httpx):
httpx de forma síncrona e sem sessão.httpx é mais avançada e suporta HTTP/2, o que pode trazer vantagens em termos de desempenho em comparação com requests.usando_httpx_session (lib_httpx_session):
httpx com sessões.httpx pode oferecer melhorias no desempenho e eficiência de memória, similar ao observado com requests.usando_httpx_session_async (lib_httpx_session_async):
httpx com sessões.usando_aiohttp_session_async (lib_aiohttp_session_async):
aiohttp de forma assíncrona com sessões.aiohttp é otimizada para operações assíncronas e é uma escolha popular para aplicações que necessitam de alta performance em requisições HTTP.Para executar os testes, clone este repositório e instale as dependências:
git clone git@github.com:lvgalvao/BatalhaDasBibliotecasHTTP.git
cd BatalhaDasBibliotecasHTTP
pip install -r requirements.txt
Execute o script principal:
python main.py
Tempos de Execução e Uso de Memória:
lib_request: Tempo de execução: 8.19 segundos, Uso de memória: 31.31 MiB.
lib_request_session: Tempo de execução: 1.91 segundos, Uso de memória: 0.31 MiB.
lib_httpx: Tempo de execução: 5.75 segundos, Uso de memória: 17.67 MiB.
lib_httpx_session: Tempo de execução: 1.95 segundos, Uso de memória: 0.39 MiB.
lib_httpx_session_async: Tempo de execução: 0.89 segundos, Uso de memória: 7.42 MiB.
lib_aiohttp_session_async: Tempo de execução: 0.79 segundos, Uso de memória: 13.45 MiB.
A análise dos tempos de execução de cada uma das suas funções revela informações importantes sobre a eficiência de diferentes abordagens e bibliotecas para fazer requisições HTTP em Python. Vamos discutir cada uma delas:
lib_request (8.19 segundos, 31.31 MiB):
lib_request utiliza a biblioteca requests sem sessão, fazendo com que cada requisição estabeleça uma nova conexão. Isso resulta em maior latência e maior uso de memória devido ao overhead de estabelecer conexões e gerenciar recursos separadamente para cada requisição.lib_request_session (1.91 segundos, 0.31 MiB):
requests melhora drasticamente o tempo de execução e reduz significativamente o uso de memória. Isso se deve à reutilização de conexões TCP, que reduz o overhead de rede e melhora a eficiência geral das requisições.lib_httpx (5.75 segundos, 17.67 MiB):
lib_httpx utiliza a biblioteca httpx de forma síncrona e sem sessão. Embora seja mais rápida que lib_request, ainda é menos eficiente do que as implementações com sessão. Isso sugere que, enquanto httpx pode ter algumas otimizações internas em comparação com requests, a ausência de sessões ainda resulta em tempos de execução mais longos e maior uso de memória.lib_httpx_session (1.95 segundos, 0.39 MiB):
lib_request_session, a versão com sessão de httpx mostra uma melhoria significativa em termos de tempo de execução e uso de memória. Isso reforça a importância da reutilização de conexões para melhorar a eficiência das requisições HTTP.lib_httpx_session_async (0.89 segundos, 7.42 MiB) e lib_aiohttp_session_async (0.79 segundos, 13.45 MiB):
httpx e aiohttp com sessões. A capacidade de fazer várias requisições simultaneamente de forma não bloqueante explica os tempos de execução significativamente mais curtos. No entanto, isso vem com um custo de uso de memória mais alto devido ao gerenciamento de múltiplas operações concorrentes.As versões com sessão (lib_request_session e lib_httpx_session) apresentam um uso de pico de memória significativamente menor do que as outras, podem ser explicados por algumas características fundamentais do gerenciamento de conexões e sessões nas bibliotecas requests e httpx:
Reutilização de Conexões: Quando você usa sessões em requests ou httpx, a conexão TCP estabelecida com o servidor é reutilizada para várias requisições. Isso reduz o overhead de abrir e fechar conexões TCP para cada requisição individual. Abrir e fechar conexões repetidamente (como no caso sem sessão) consome mais memória devido ao overhead de estabelecer novas conexões TCP e ao armazenamento temporário de dados associados a cada conexão.
Eficiência no Gerenciamento de Recursos: As sessões gerenciam eficientemente os recursos como sockets e buffers internos. Em contraste, realizar requisições sem sessão pode resultar em um uso menos eficiente desses recursos, pois cada requisição trata seus próprios recursos de rede de forma isolada.
Menos Overhead de Alocação de Memória: Usar sessões significa que menos objetos são criados e destruídos durante o processo de fazer várias requisições, o que leva a um menor overhead de alocação de memória. Sem sessões, cada requisição precisa criar seus próprios objetos de conexão, headers, cookies, etc., o que aumenta o uso de memória.
Menor Carga de I/O: Ao reutilizar conexões, as sessões podem reduzir a carga geral de I/O, pois menos operações de rede são necessárias. Menos I/O geralmente se traduz em menos uso de memória.
Uso de Memória em Requisições Assíncronas: As versões assíncronas (lib_httpx_session_async e lib_aiohttp_session_async) mostram um maior uso de memória porque gerenciam várias requisições em paralelo, o que naturalmente exige mais recursos de memória para manter o estado de múltiplas operações simultâneas.
O uso de sessões otimiza o processo de fazer várias requisições HTTP ao reutilizar conexões e gerenciar recursos de forma mais eficiente. Isso explica por que as versões com sessão têm um pico de uso de memória significativamente menor em comparação com as versões sem sessão ou as assíncronas, que lidam com requisições de maneira isolada ou simultânea, respectivamente.
lib_request_session e lib_httpx_session.lib_httpx_session_async e lib_aiohttp_session_async) são significativamente mais rápidas, embora exijam mais memória devido à natureza concorrente.Selected from shared topics, language and repository description—not editorial ratings.
unb-mds /
Minas de Cultura: Um repositório dedicado a consultar gastos culturais do estado de Minas Gerais. Links da landingpage do projeto Minas de Cultura:https://unb-mds.github.io/2024-1-MinasDeCultura/landingpage/index.html
AkhiaBR /
PythonScriptingSEC é um repositório dedicado ao uso da linguagem Python no contexto da segurança cibernética, explorando seu potencial em tarefas relacionadas à análise, automação e manipulação de redes e sistemas.
Rodrigo-Kelven /
Um repositório dedicado a armazenar algoritmos de diferentes classes e propósitos.
silascosta /
Um repositório dedicado a implementações de algoritmos e estruturas de dados em Python. Este projeto visa oferecer uma coleção abrangente de algoritmos clássicos e estruturas de dados fundamentais, acompanhados por explicações claras e exemplos práticos. Mais informações no Readme
FabbriTutuy /
Um simples repositório dedicado para treino e estudo de python em projetos pessoais
welli7ngton /
Um repositório dedicado ao tutorial da ferramenta de RPA robotframework.