python的各种网络请求库 urllib3 requests aiohttp 分别请求http和https 的效率对比,多线程、gevent、asyncio对比,超大线程池、2n + 1 线程池对比

摘要:
测试方案3urllib3+gevent200并发+连接池+请求https请求平均每秒完成270次。请求包get请求http的url,实际执行代码为24000行。urllib3包get请求http的url,实际执行代码为11000行。由于urllib3实际运行的代码行数少于请求包的一半,因此urllib33的性能明显优于请求。

此文三个目的,不能光意淫概念误入歧途,有的人以为得概念一套一套的,其实并不是想的那样,实践对比才能出真知,要尊重实践。

此文使用各种网络请求库和各种并发模式和各种大小的线程池来测试请求50000次一个内容源码很小的百度静态页面,分别测试http和https

https://www.baidu.com/content-search.xml
http://www.baidu.com/content-search.xml

网页内容很小,(基本可以排除认为请求得慢,耍赖说是网速带宽差造成的)。

1.总结一下python的各种网络请求库的性能,包括urllib3 和requests和aiohttp

2.总结一下 多线程 asyncio gevent的 并发效率

3.4核cpu情况下对比200线程池并发数量和 9线程池(2 * 4  +1)并发效率。

测试截图如下,nb_log把print时间自动打印出来,方便控制台搜索每秒运行多少次,一定要import nb_log。

python的各种网络请求库 urllib3 requests aiohttp 分别请求http和https 的效率对比,多线程、gevent、asyncio对比,超大线程池、2n + 1 线程池对比第1张

测试方案1:

python的各种网络请求库 urllib3 requests aiohttp 分别请求http和https 的效率对比,多线程、gevent、asyncio对比,超大线程池、2n + 1 线程池对比第2张

urllib3 + ThreadPoolExecutor 200线程池 +请求连接池 + 请求 https

平均每秒请求完成 750次。

测试方案2

python的各种网络请求库 urllib3 requests aiohttp 分别请求http和https 的效率对比,多线程、gevent、asyncio对比,超大线程池、2n + 1 线程池对比第3张

requests + ThreadPoolExecutor 200线程池 +请求连接池 + 请求 https

平均每秒请求完成310次。

测试方案3

python的各种网络请求库 urllib3 requests aiohttp 分别请求http和https 的效率对比,多线程、gevent、asyncio对比,超大线程池、2n + 1 线程池对比第4张

urllib3 + gevent 200并发 + 连接池 + 请求https

平均每秒秒请求完成270次。

测试方案4

python的各种网络请求库 urllib3 requests aiohttp 分别请求http和https 的效率对比,多线程、gevent、asyncio对比,超大线程池、2n + 1 线程池对比第5张

urllib3 + 线程池 200并发 + 连接池 + 请求http (注意是http,不是https,https会执行更多的代码路径消耗更高的cpu)

平均每秒秒请求完成1300次。

测试方案5

python的各种网络请求库 urllib3 requests aiohttp 分别请求http和https 的效率对比,多线程、gevent、asyncio对比,超大线程池、2n + 1 线程池对比第6张

requests + 线程池 200并发 + 连接池 + 请求http (注意是http,不是https)

平均每秒秒请求完成330次。

测试方案6

python的各种网络请求库 urllib3 requests aiohttp 分别请求http和https 的效率对比,多线程、gevent、asyncio对比,超大线程池、2n + 1 线程池对比第7张

urllib3 + gevent 200并发 + 连接池 + 请求http (注意是http,不是https)

平均每秒秒请求完成580次。

测试方案7

python的各种网络请求库 urllib3 requests aiohttp 分别请求http和https 的效率对比,多线程、gevent、asyncio对比,超大线程池、2n + 1 线程池对比第8张

urllib3 + 线程池 200并发 + 不使用请求连接池 + 请求https (注意是https,不是http)

平均每秒秒请求完成580次。

测试方案8

python的各种网络请求库 urllib3 requests aiohttp 分别请求http和https 的效率对比,多线程、gevent、asyncio对比,超大线程池、2n + 1 线程池对比第9张

requests + 线程池 200并发 + 不使用请求连接池 + 请求https (注意是https,不是http)

平均每秒秒请求完成120次。

测试方案9

python的各种网络请求库 urllib3 requests aiohttp 分别请求http和https 的效率对比,多线程、gevent、asyncio对比,超大线程池、2n + 1 线程池对比第10张

aiohttp  + asyncio 200并发 + 使用请求连接池 + 请求https (注意是https,不是http)

平均每秒秒请求完成990次。

测试方案10

python的各种网络请求库 urllib3 requests aiohttp 分别请求http和https 的效率对比,多线程、gevent、asyncio对比,超大线程池、2n + 1 线程池对比第11张

aiohttp  + asyncio 200并发 + 使用请求连接池 + 请求http (注意是http,不是https)

平均每秒秒请求完成1080次。

测试方案11

python的各种网络请求库 urllib3 requests aiohttp 分别请求http和https 的效率对比,多线程、gevent、asyncio对比,超大线程池、2n + 1 线程池对比第12张

aiohttp  + asyncio 200并发 + 不使用请求连接池 + 请求http (注意不使用连接池)

平均每秒秒请求完成400次。

测试方案12

python的各种网络请求库 urllib3 requests aiohttp 分别请求http和https 的效率对比,多线程、gevent、asyncio对比,超大线程池、2n + 1 线程池对比第13张

aiohttp  + asyncio 200并发 + 不使用请求连接池 + 请求https (注意不使用连接池)

平均每秒秒请求完成170次。

综上所述, 请求http比https快很多

连接池比不使用连接池快很多。

gevent 比线程池慢。

urllib3 比requests快很多。

asyncio + aiohttp 比线程池 + urllib3 效率差不多,绝对不会出现asyncio吊打多线程几十倍,无需过于理论上担忧线程切换消耗大量资源,这只是个理论,实际真实场景下不会强很多,而且同步编程简单很多。

具体原因是每种场景运行次数差别,是因为消耗的cpu单核达到100%了,单核单进程无法再提高速度了,除非是花10万定制一个10ghz主频的cpu液氮散热。

requests包get请求http的url,实际执行的代码是24000行,urllib3包get 请求http的url实际执行11000行代码,因为urllib3实际运行的代码行数只有requests包的一半以下,所以urllib3性能明显好于requests。

具体怎么知道一个函数运行的背后实际执行多少行代码呢,使用pycharm打断点 一行一行慢慢运行慢慢数是可以的,但这样会数到你怀疑人生,使用pip install pysnooper_click_able,然后把装饰器加在需要 分析的 函数就可以统计出来代码运行轨迹和实际执行的总行数。pysnooper_click_able 是神级别黑科技装饰器。

来计算一下执行的 代码实际行数,一次urllib3.get  需要运行1万2000行代码 ,每秒运行了1000次请求,那就是相当于每秒运行了 1千万 行python代码,所以讷还可以了。那些对性能一无所知的小白以为单进程可以每秒请求100万次 url,完完全全的错误了1000倍,因为是没有 使用 pysnooper_click_able 分析代码执行行数,以为发一个url请求只需要执行10几行python代码,大错特错。如果有人认为单进程能每秒请求1万次url,不管你用什么异步并发还是线程并发实现的,我们赌1万人民币可以。

 在4核机器上亲求一个非常快的接口,4线程和200线程相比,200线程快很多。如果接口响应耗时长,例如需要耗时1秒,200线程请求完成5万次的时间远远远远小于4线程请求耗时,无需过滤线程多了切换耗资源。

所以大胆点,只要不是纯计算的,有io超过0.5秒的开200个线程,大胆点,不要怕cpu爆炸了,有的买了mac笔记本的人真的害怕开很多线程总是担心线程开多了,笔记本会爆炸会损害,不用担心,炸了我陪你一个。

再说这么爱惜笔记本这么小气的人,为什么非要花1万3买苹果笔记本讷,5800u 8核16线程 + 32g + depping20 系统的笔记本才4000多元不行吗,跑代码的性能开16进程 + 每个进程内部开200个线程,跑起代码来,运行速度远远的暴击不敢开多线程怕mac笔记本爆炸的人。

免责声明:文章转载自《python的各种网络请求库 urllib3 requests aiohttp 分别请求http和https 的效率对比,多线程、gevent、asyncio对比,超大线程池、2n + 1 线程池对比》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇eclipse颜色配置C#三层ATM-2.编写Model项目实体类下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Springboot配置https访问

介绍 该篇博文主要介绍如何配置Springboot使其打包部署的服务必须通过HTTPS协议才可访问,仅供内部研究使用。 生成https证书 要使用https,首先需要ssl证书,获取SSL证书有两种方式: 自己通过keytool生成 通过证书授权机构购买 这里本地测试使用,通过keytool生成,方式如下 C:Usersfeifuzeng>key...

Qt编写的项目作品6-可视化大屏电子看板系统

一、功能特点 整体总共分三级界面,一级界面是整体布局,二级界面是单个功能模块,三级界面是单个控件。 子控件包括饼图+圆环图+曲线图+柱状图+柱状分组图+横向柱状图+横向柱状分组图+合格率控件+百分比控件+进度控件+设备状态面板+表格数据+地图控件(包括动态闪烁点+迁徙图等)+视频控件+其他控件等。 二级界面可以自由拖动悬浮,支持最小化最大化关闭,响应双击...

IDEA界面太丑??尝试一下这几个风格

>>>>>>>>>>原文地址<<<<<<<<<<>>>>>>>>>>原文地址<<<<<<<<<<>>>...

jmeter环境搭建

1.JMeter 介绍      Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序)。它可以用来测试静态和动态资源的性能,例如:静态文件,Java Servlet,CGI Scripts,Java Object,数据库和FTP服务器等等。JMeter可用于模拟大量负载来测试一台服务器,...

精品 IDEA 插件大汇总!值得收藏

轻松提高 Java 开发效率 俗话说,工欲善其事,必先利其器。想要提升编程开发效率,必须选择一款顺手的开发工具。 对于 Java 开发者,JetBrains IDEA 无疑是目前最主流的开发工具,既简单易用、又强大灵活,并且可以通过安装插件全副武装。 今天鱼皮汇总了 IDEA 实用插件,分享给大家,希望帮助大家大幅提高开发效率! 插件较多,建议大家先观看...

使用sublimeserver启动本地服务器进行调试

最近在做前后端分离的项目,访问后台接口的时候会产生跨域问题,修改了相关配置解决了跨域问题,但是配置中只对开发环境进行了设置,没有设置生产环境,为了验证生产环境确实无法访问后台接口遂npm run build之后把index.html页面通过本地服务器启动一下,总之说了这么多,总结起来也就一句话,我想要弄一个本地服务器... 之前使用过sublime的本地服...