Python Requests与PyCurl性能对比
Requests库和PyCurl在性能上有什么区别呢?
我的理解是,Requests是对urllib的一个Python封装,而PyCurl是对libcurl的一个Python封装,后者是原生的,所以PyCurl的性能应该更好,但具体好多少我不太确定。
我找不到任何比较的基准测试数据。
4 个回答
看起来有个新玩意儿出现了:- pycurl的requests接口。
谢谢你提供的基准测试 - 很不错 - 我喜欢curl,它似乎能做的事情比http多一些。
首先,requests
是建立在 urllib3
库 之上的,根本没有使用标准库中的 urllib
或 urllib2
库。
把 requests
和 pycurl
在性能上进行比较其实没什么意义。虽然 pycurl
可能用到了 C 语言的代码,但就像所有网络编程一样,你的执行速度主要取决于你电脑和目标服务器之间的网络情况。而且,目标服务器的响应速度也可能很慢。
总的来说,requests
提供了一个更友好的接口来使用,你会发现用这个更友好的接口工作时效率更高。
我为你写了一个完整的性能测试,使用了一个简单的Flask应用程序,后端是gUnicorn/meinheld和nginx(为了提高性能和支持HTTPS),测试了完成10,000个请求需要多长时间。测试是在AWS上进行的,使用了一对没有负载的c4.large实例,服务器实例没有受到CPU限制。
总结:如果你需要处理很多网络请求,建议使用PyCurl;否则可以用requests。PyCurl在处理小请求时速度是requests的2到3倍,直到你遇到大请求的带宽限制(这里大约是520 MBit或65 MB/s),而且它的CPU使用率比requests低3到10倍。这些数据是在连接池行为相同的情况下比较的;默认情况下,PyCurl使用连接池和DNS缓存,而requests则不使用,所以如果简单实现的话,requests会慢10倍。
- 使用pycurl重用连接时,发出请求大约需要73微秒的CPU时间
- 使用requests重用连接时,发出请求大约需要526微秒的CPU时间
- 使用pycurl发起新连接并发出请求(不重用连接)大约需要165微秒的CPU时间,打开连接大约需要92微秒
- 使用requests发起新连接并发出请求(不重用连接)大约需要1078微秒的CPU时间,打开连接大约需要552微秒
完整结果请查看链接,里面有性能测试的方法和系统配置。
注意事项:虽然我尽力确保结果是以科学的方式收集的,但这只是测试了一种系统类型和一种操作系统,以及有限的性能和特别是HTTPS选项。