Python 请求与 PyCurl 性能

2024-05-01

Requests 库与 PyCurl 的性能相比如何?

我的理解是,Requests 是 urllib 的 python 包装器,而 PyCurl 是本机 libcurl 的 python 包装器,因此 PyCurl 应该获得更好的性能,但不确定多少。

我找不到任何比较基准。


我给你写了一个完整的基准测试 https://github.com/svanoort/python-client-benchmarks,使用由 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 倍。

Note that double log plots are used for the below graph only, due to the orders of magnitude involved HTTP & HTTPS throughput HTTP & HTTPS RPS

  • 重用连接时,pycurl 需要大约 73 CPU 微秒来发出请求
  • 请求大约需要526 CPU 微秒重用连接时发出请求
  • pycurl 大约需要 165 CPU 微秒打开一个新连接并发出请求(无连接重用),或约 92 微秒打开
  • 请求大约需要1078CPU 微秒至打开一个新连接并发出请求(无连接重用),或约 552 微秒打开

完整结果在链接中 https://github.com/svanoort/python-client-benchmarks,以及基准测试方法和系统配置。

Caveats:尽管我煞费苦心地确保以科学的方式收集结果,但它仅测试一种系统类型和一种操作系统,以及有限的性能子集,尤其是 HTTPS 选项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 请求与 PyCurl 性能 的相关文章

随机推荐