Requests 库与 PyCurl 的性能相比如何?
我的理解是 Requests 是 urllib 的 python 包装器,而 PyCurl 是原生 libcurl 的 python 包装器,所以 PyCurl 应该获得更好的性能,但不确定多少。
我找不到任何比较基准。
Requests 库与 PyCurl 的性能相比如何?
我的理解是 Requests 是 urllib 的 python 包装器,而 PyCurl 是原生 libcurl 的 python 包装器,所以 PyCurl 应该获得更好的性能,但不确定多少。
我找不到任何比较基准。
我为你写了一个完整的基准测试,使用由 gUnicorn/meinheld + nginx 支持的一个简单的 Flask 应用程序(用于性能和 HTTPS),并查看完成 10,000 个请求需要多长时间。测试在 AWS 中在一对未加载的 c4.large 实例上运行,并且服务器实例不受 CPU 限制。
TL;DR 总结:如果你在做很多网络,使用 PyCurl,否则使用请求。PyCurl 完成小请求的速度是请求的 2 到 3 倍,直到您达到大请求的带宽限制(此处约为 520 MBit 或 65 MB/s),并且使用的 CPU 功率减少了 3 倍到 10 倍。这些图比较了连接池行为相同的情况;默认情况下,PyCurl 使用连接池和 DNS 缓存,而请求不使用,因此简单的实现将慢 10 倍。
完整结果在链接中,以及基准方法和系统配置。
警告:虽然我努力确保以科学的方式收集结果,但它只测试一种系统类型和一种操作系统,以及有限的性能子集,尤其是 HTTPS 选项。
似乎有一个新的孩子: - pycurl 的请求接口。
谢谢你的基准 - 很好 - 我喜欢 curl,它似乎能够做的比 http 多一点。
专注于尺寸 -
在我的带有 8GB RAM 和 512GB SSD 的 Mac Book Air 上,对于以每秒 3 KB 的速度传入的 100MB 文件(来自互联网和 wifi),pycurl、curl 和请求库的 get 函数(无论是分块还是流式传输)都是基本上一样。
在具有 4GB RAM 的较小四核 Intel Linux机器上,通过 localhost(来自同一机器上的 Apache),对于 1GB 文件,curl 和 pycurl 比“请求”库快 2.5 倍。对于请求,分块和流式传输一起提供 10% 的提升(块大小超过 50,000)。
我以为我将不得不为 pycurl 交换请求,但不是这样,因为我正在制作的应用程序不会让客户端和服务器关闭。