Python请求与PyCurl性能

2024-05-20 03:43:12 发布

您现在位置:Python中文网/ 问答频道 /正文

在性能方面,请求库与PyCurl相比如何

我的理解是,请求是urllib的python包装,而PyCurl是libcurl的python包装,它是本机的,因此PyCurl应该获得更好的性能,但不确定性能如何

我找不到任何比较基准


Tags: 基准urllib性能pycurl不确定性libcurl
3条回答

似乎有一个新的孩子在这个街区:-pycurl的请求接口

谢谢你的基准-很好-我喜欢curl,它似乎比http做得更多

https://github.com/dcoles/pycurl-requests

I wrote you a full benchmark,使用gUnicorn/meinheld+nginx(用于性能和HTTPS)支持的小型Flask应用程序,查看完成10000个请求需要多长时间。测试在AWS中对一对卸载的c4.1大型实例运行,服务器实例没有CPU限制

TL;DR summary:如果你在做大量的网络工作,请使用PyCurl,否则请使用requests。PyCurl完成小请求的速度是请求的2-3倍,直到您遇到大请求的带宽限制(这里约为520 MBit或65 MB/s),并且使用的CPU功率减少了3到10倍。这些数字比较了连接池行为相同的情况;默认情况下,PyCurl使用连接池和DNS缓存,而请求不使用连接池和DNS缓存,因此一个简单的实现的速度将是原来的10倍

Combined-chart-RPSCPU Time by request size detailed

Just HTTP throughputJust HTTP RPS

注意,由于涉及数量级,双对数图仅用于下图HTTP & HTTPS throughputHTTP & HTTPS RPS

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

Full results are in the link,以及基准方法和系统配置

注意事项:尽管我努力确保以科学的方式收集结果,但它只测试一种系统类型和一种操作系统,以及有限的性能子集,尤其是HTTPS选项

首先也是最重要的是,requests构建在^{} library之上,根本不使用stdliburlliburllib2

在性能上比较requestspycurl没有什么意义pycurl可能使用C代码进行工作,但与所有网络编程一样,您的执行速度在很大程度上取决于将机器与目标服务器分离的网络。此外,目标服务器的响应速度可能较慢

最后,requests有一个更友好的API可以使用,您会发现使用这个更友好的API会更有效率

相关问题 更多 >