最近在用 python 的协程做开发
由于异步 IO 的深入人心,且性能提升明显
python 也是推出了标准库 asyncio 和关键字 async/await
让开发者从 callback 回调地狱和 gevent 猴子补丁争议中解脱
简单、方便的开发让人能看懂的程序
涉及到异步网络请求的比较出名的就是 aiohttp 和 httpx
既然用了异步,肯定是追求性能的
有热心开发者就做了个性能对比:
还贴心的附上了测试的源码,喜欢动手的可以玩一玩
不同硬件条件下,数据会不同
我测了下,aiohttp 的结果平均 500+:
httpx 的结果平均 250+:
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,先这样~