此文三个目的,不能光意淫概念误入歧途,有的人以为得概念一套一套的,其实并不是想的那样,实践对比才能出真知,要尊重实践。
此文使用各种网络请求库和各种并发模式和各种大小的线程池来测试请求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。
测试方案1:
urllib3 + ThreadPoolExecutor 200线程池 +请求连接池 + 请求 https
平均每秒请求完成 750次。
测试方案2
requests + ThreadPoolExecutor 200线程池 +请求连接池 + 请求 https
平均每秒请求完成310次。
测试方案3
urllib3 + gevent 200并发 + 连接池 + 请求https
平均每秒秒请求完成270次。
测试方案4
urllib3 + 线程池 200并发 + 连接池 + 请求http (注意是http,不是https,https会执行更多的代码路径消耗更高的cpu)
平均每秒秒请求完成1300次。
测试方案5
requests + 线程池 200并发 + 连接池 + 请求http (注意是http,不是https)
平均每秒秒请求完成330次。
测试方案6
urllib3 + gevent 200并发 + 连接池 + 请求http (注意是http,不是https)
平均每秒秒请求完成580次。
测试方案7
urllib3 + 线程池 200并发 + 不使用请求连接池 + 请求https (注意是https,不是http)
平均每秒秒请求完成580次。
测试方案8
requests + 线程池 200并发 + 不使用请求连接池 + 请求https (注意是https,不是http)
平均每秒秒请求完成120次。
测试方案9
aiohttp + asyncio 200并发 + 使用请求连接池 + 请求https (注意是https,不是http)
平均每秒秒请求完成990次。
测试方案10
aiohttp + asyncio 200并发 + 使用请求连接池 + 请求http (注意是http,不是https)
平均每秒秒请求完成1080次。
测试方案11
aiohttp + asyncio 200并发 + 不使用请求连接池 + 请求http (注意不使用连接池)
平均每秒秒请求完成400次。
测试方案12
aiohttp + asyncio 200并发 + 不使用请求连接池 + 请求https (注意不使用连接池)
平均每秒秒请求完成170次。
综上所述, 请求http比https快很多
连接池比不使用连接池快很多。
gevent 比线程池慢。
urllib3 比requests快很多。
asyncio + aiohttp 比线程池 + urllib3快一丝丝。
python的各种网络请求库 urllib3 requests aiohttp 分别请求http和https 的效率对比,多线程、gevent、asyncio对比,超大线程池、2n + 1 线程池对比
原文:https://www.cnblogs.com/ydf0509/p/14655383.html