Requests库和PyCurl在性能上有何比较?
据我了解,Requests是urllib的Python包装器,而PyCurl是libcurl的Python包装器,后者是本地的,因此PyCurl应该具有更好的性能,但不确定提升多少。
我找不到任何性能比较基准。
Requests库和PyCurl在性能上有何比较?
据我了解,Requests是urllib的Python包装器,而PyCurl是libcurl的Python包装器,后者是本地的,因此PyCurl应该具有更好的性能,但不确定提升多少。
我找不到任何性能比较基准。
我为你编写了一个完整的基准测试,使用一个简单的Flask应用程序,并以gUnicorn/meinheld + nginx作为支持(用于性能和HTTPS),并查看完成10,000个请求需要多长时间。测试在一对未加载的c4.large实例上在AWS上运行,服务器实例未受CPU限制。
简短摘要:如果你正在处理大量网络操作,请使用PyCurl;否则,请使用requests。PyCurl可以比requests快2倍到3倍来完成小型请求,直到你达到带宽限制为止(在这里约为520 MBit或65 MB/s),并且使用的CPU功率从3倍到10倍不等。这些数字比较了连接池行为相同的情况;默认情况下,PyCurl使用连接池和DNS缓存,而requests则没有,因此朴素实现将慢10倍。
完整结果可在此链接查看,其中包括基准测试方法和系统配置。
注意:尽管我已经努力确保结果以科学的方式收集,但它只测试了一个系统类型和一个操作系统,并且是性能特别是HTTPS选项的有限子集。
首先,requests
是基于 urllib3
库 构建的,而标准库中的 urllib
或 urllib2
库根本没有使用。
在性能方面,比较 requests
和 pycurl
没有太大意义。虽然 pycurl
可能会使用 C 代码进行工作,但像所有网络编程一样,你的执行速度主要取决于分隔您的机器与目标服务器的网络。此外,目标服务器可能响应缓慢。
最终,requests
有一个更加友好的 API,您会发现使用这个更友好的 API 会提高您的生产力。
似乎有一个新的选择:使用pycurl的requests接口。
非常感谢您提供的基准测试,很棒。我喜欢curl,看起来它可以比http做更多的事情。
专注于文件大小 -
在我的Mac Book Air上,配备8GB RAM和512GB SSD,对于一个100MB的文件,每秒传输速度为3KB(来自互联网和wifi),无论是使用pycurl、curl还是requests库的get函数(无论是分块还是流式传输),它们的表现几乎相同。
在一台更小的四核Intel Linux盒子上,配备4GB RAM,在本地主机(从同一台主机上的Apache服务器)上,对于一个1GB的文件,curl和pycurl比'requests'库快2.5倍。而对于请求分块和流式传输的组合,可以提高10%的性能(块大小大于50,000)。
我原以为需要将requests替换为pycurl,但由于我正在制作的应用程序不会有那么紧密的客户端和服务器,所以不需要这样做。
pong
不太现实),并包含混合的内容编码模式(有压缩和无压缩),然后基于此生成计时数据,那么您就会得到具有实际意义的基准测试数据。 - Martijn PieterscStringIO
缓冲区;所有非pycurl测试都必须将响应作为Python字符串对象生成。 - Martijn Pieters