Ser melhor ou não vai depender de pra que você ta usando um cliente HTTP. A maior vantagem é realmente a disponibilidade de um cliente assíncrono. Mas o que significa ser assíncrono?
Vc já deve ter visto async
e await
no mundo python. De forma geral, enquanto algo está sendo "awaitado" ou "esperado", o fluxo do programa pode continuar. No caso de um cliente HTTP, o assincronismo permite que vc emita as requests de forma assíncrona, ou seja, enquanto uma request aguarda a resposta do servidor, seu programa pode continuar fazendo outras coisas.
Se vc pensa em raspar uma API HTTP, por exemplo, a utilização de um cliente assíncrono vai acelerar muito o processo (claro, respeitando os limites impostos pelo servidor, como por exemplo limites de throttling).
Caso vc queira explorar raspagem de API HTTP com o httpx
, recomendo utilizar em conjunto o aiometer
, que é basicamente um limitador de concorrência.
Um pouco de número pra quem sabe te ajudar a entender:
Imagina um servidor que demora 1 segundo pra retornar uma resposta. Imagina que vc precisa fazer 10 requests pra esse servidor.
Com o requests
, vc precisaria fazer as requests uma a uma, ou seja, algo como:
import requests
for _ in range(10):
requests.get("servidor.com.br/api")
Com isso, temos que o programa acima leva 10 segundos pra ser finalizado, visto que cada requests.get
irá parar a execução do programa por 1 segundo, e somente quando receber a resposta, irá passar para a próxima instrução.
O httpx
te permite, à grosso modo, enviar as 10 requests ao mesmo tempo, de forma que todas as 10 requests sejam recebidas ao mesmo tempo, ou seja, apesar da resposta demorar 1 segundo, as 10 chegarão ao mesmo tempo. Com isso, o programa irá levar 1 segundo pra ser finalizado.
No readme do repositório do aiometer
tem um exemplo de como implementar a situação acima.