aiohttp vs httpx 性能与代理

872 阅读1分钟

最近在用 python 的协程做开发

由于异步 IO 的深入人心,且性能提升明显

python 也是推出了标准库 asyncio 和关键字 async/await

让开发者从 callback 回调地狱和 gevent 猴子补丁争议中解脱

简单、方便的开发让人能看懂的程序

涉及到异步网络请求的比较出名的就是 aiohttp 和 httpx

既然用了异步,肯定是追求性能的

有热心开发者就做了个性能对比:

github.com/encode/http…

还贴心的附上了测试的源码,喜欢动手的可以玩一玩

不同硬件条件下,数据会不同

我测了下,aiohttp 的结果平均 500+:

image.png

httpx 的结果平均 250+:

image.png

aiohttp 吊打 httpx,选哪个大家心里有数了

测试的时候还有点小插曲,因为我的虚拟机服务器配置了系统代理

aiohttp 和 httpx 在处理系统代理上是有差异的

aiohttp 遵循了 python 之禅的哲学:Explicit is better than implicit.

默认是不使用系统代理的,要使用的话,需要显式的进行配置:

aiohttp.ClientSession(trust_env=True)
  • aiohttp 开发者还有关于这个问题的讨论:github.com/aio-libs/ai…
  • aiohttp 3.9.1 配置 trust_env=True 后有点小问题,它获取系统代理的代码逻辑有点绕,导致的结果是请求会变慢。解决办法是在请求 URL 时,直接配置 proxy 参数。 后面有空写篇文章专门研究下。

而 httpx 的行为遵循了 linux 系统的惯例,如果配置了系统代理,那么就会默认使用

不想使用的话,可以这样:

httpx.AsyncClient(trust_env=False)

ok,先这样~