Python编程:aiohttp和requests网络io性能比较

简介: 使用4 种方式 对网络发起10次请求,进行10次耗时测试

使用4 种方式 对网络发起10次请求,进行10次耗时测试


以下代码在 Python3.6.5 下测试

测试代码

# -*- coding: utf-8 -*-

import asyncio
import time

import aiohttp
import requests

urls = ["https://www.baidu.com/"] * 10


# 1、直接使用 requests
def requests_main():
    for url in urls:
        response = requests.get(url)
        html = response.text


# 2、使用 requests.session
def requests_session():
    with requests.session() as session:
        for url in urls:
            response = session.get(url)
            html = response.text


# 3、使用 aiohttp
async def aiohttp_main():
    for url in urls:
        async with aiohttp.ClientSession() as session:
            async with session.get(url) as response:
                html = await response.text()


# 4、 使用 aiohttp.session
async def aiohttp_session():
    async with aiohttp.ClientSession() as session:
        for url in urls:
            async with session.get(url) as response:
                html = await response.text()


if __name__ == '__main__':
    for i in range(10):
        start_time = time.time()
        # requests_main()
        # requests_session()

        # asyncio.get_event_loop().run_until_complete(aiohttp_main())
        asyncio.get_event_loop().run_until_complete(aiohttp_session())

        end_time = time.time()
        print("{:.3}".format(end_time - start_time))

    """
    输出结果:
    
    requests_main
    2.2, 3.69, 2.28, 2.14, 3.37, 2.25, 3.95, 2.97, 2.24, 3.61
    
    requests_session
    0.917, 0.719, 0.682, 0.814, 0.874, 1.66, 0.676, 0.672, 0.66, 0.824
    
    aiohttp_main
    3.1, 2.05, 2.12, 3.12, 1.97, 2.19, 3.38, 2.17, 2.44, 3.2 
    
    aiohttp_session
    1.63, 0.599, 0.656, 0.586, 0.603, 0.607, 0.948, 0.6, 1.54, 1.42 
    
    """

对输出的结果进行平均值计算

requests_main_list = [2.2, 3.69, 2.28, 2.14, 3.37, 2.25, 3.95, 2.97, 2.24, 3.61]

requests_session_list = [0.917, 0.719, 0.682, 0.814, 0.874, 1.66, 0.676, 0.672, 0.66, 0.824]
aiohttp_main_list = [3.1, 2.05, 2.12, 3.12, 1.97, 2.19, 3.38, 2.17, 2.44, 3.2]
aiohttp_session_list = [1.63, 0.599, 0.656, 0.586, 0.603, 0.607, 0.948, 0.6, 1.54, 1.42]

requests_main_avg = sum(requests_main_list) / len(requests_main_list)
requests_session_avg = sum(requests_session_list) / len(requests_session_list)
aiohttp_main_avg = sum(aiohttp_main_list) / len(aiohttp_main_list)
aiohttp_session_avg = sum(aiohttp_session_list) / len(aiohttp_session_list)

print(requests_main_avg)
print(requests_session_avg)
print(aiohttp_main_avg)
print(aiohttp_session_avg)

计算结果如下

6.png

所以,对一个网站请求,最好维护一个session,较少握手连接次数是很有必要的,就算是单线程请求,也能得到很好地细性能提升


            </div>
目录
相关文章
|
9月前
|
数据采集 运维 前端开发
一场始于 Selector Error 的拯救行动:企查查数据采集故障排查记
开发人员小李在使用Python爬虫从企查查抓取公司工商信息时,遇到选择器失效和动态加载内容无法解析的问题。通过分析日志和网页结构变化,发现关键数据由JavaScript动态渲染。解决方案包括引入Selenium模拟浏览器行为、配置代理IP和请求头、调整选择器,并优化代码实现。最终成功解决了数据采集问题,确保了爬虫的稳定性和可靠性。改进方案还涉及动态加载应对策略、选择器稳定性保障及代理池搭建等措施,以应对未来可能的变化。
265 3
一场始于 Selector Error 的拯救行动:企查查数据采集故障排查记
|
8月前
|
人工智能 自然语言处理 测试技术
在PyCharm中提升编程效率:通义灵码(DeepSeek)助手全攻略(新版)
最近小栈在PyCharm中使用了阿里的 通义灵码 插件还不错,本次就再分享一个好用的AI代码助手,让编码过程更加方便!
2509 17
|
JavaScript
vue3完整教程从入门到精通(新人必学2,搭建项目)
本文介绍了如何在Vue 3项目中安装并验证Element Plus UI框架,包括使用npm安装Element Plus、在main.js中引入并使用该框架,以及在App.vue中添加一个按钮组件来测试Element Plus是否成功安装。
486 0
vue3完整教程从入门到精通(新人必学2,搭建项目)
|
搜索推荐 关系型数据库 MySQL
mysql like查询优化
通过合理的索引设计、使用全文索引、优化查询结构以及考虑分片和分区表,可以显著提高MySQL中 `LIKE`查询的性能。针对不同的应用场景选择合适的优化策略,能够有效地提升数据库查询效率,减少查询时间。希望这些方法和技巧能帮助您优化MySQL数据库中的模糊查询。
1291 4
|
自然语言处理 算法 关系型数据库
postgresql 全文检索 SCWS和zhparser部署
UPDATE report_content SET content_tsv = to_tsvector('testzhcfg',content);
394 8
|
监控 关系型数据库 MySQL
MySQL全面解析:安装与设置详细指南
【1月更文挑战第1天】,MySQL是一款开源的关系型数据库管理系统,被广泛应用于Web应用程序的开发中。本文将深入探讨MySQL的概念、特性,以及详细介绍MySQL的安装和设置过程,帮助你快速搭建一个强大的数据库环境。
984 0
MySQL全面解析:安装与设置详细指南
|
JavaScript Java 测试技术
基于小程序的校园工会体育报名系统+springboot+vue.js附带文章和源代码设计说明文档ppt
基于小程序的校园工会体育报名系统+springboot+vue.js附带文章和源代码设计说明文档ppt
110 0
|
机器学习/深度学习 人工智能 自然语言处理
Transformer面试题总结101道
Transformer面试题总结101道
1872 0
|
测试技术 Android开发
Magisk模块-神仙自动救砖-防冻版(玩机必备)
模块功能 由某些面具模块导致你手机无法开机的情况,刷入该模块后,你无需手动任何设置自动帮你禁用所有面具模块,让你成功开机。 效果:加入完整测试用例,模块块非常稳定,现有代码不要随意更改,有测试安装10和安卓11。
7223 0
Magisk模块-神仙自动救砖-防冻版(玩机必备)
|
存储 索引
软考--操作系统之文件系统多级索引
软考--操作系统之文件系统多级索引