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>
目录
相关文章
|
5天前
|
开发框架 并行计算 算法
揭秘Python并发神器:IO密集型与CPU密集型任务的异步革命,你竟还傻傻分不清?
揭秘Python并发神器:IO密集型与CPU密集型任务的异步革命,你竟还傻傻分不清?
17 4
|
12天前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
62 21
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
12天前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
41 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
8天前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
20 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
4天前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
40 5
|
4天前
|
机器学习/深度学习 数据采集 网络安全
使用Python实现深度学习模型:智能网络安全威胁检测
使用Python实现深度学习模型:智能网络安全威胁检测
19 5
|
7天前
|
数据采集 存储 JavaScript
构建您的第一个Python网络爬虫:抓取、解析与存储数据
【9月更文挑战第24天】在数字时代,数据是新的金矿。本文将引导您使用Python编写一个简单的网络爬虫,从互联网上自动抓取信息。我们将介绍如何使用requests库获取网页内容,BeautifulSoup进行HTML解析,以及如何将数据存储到文件或数据库中。无论您是数据分析师、研究人员还是对编程感兴趣的新手,这篇文章都将为您提供一个实用的入门指南。拿起键盘,让我们开始挖掘互联网的宝藏吧!
|
6天前
|
开发框架 并行计算 .NET
燃烧吧,Python!异步编程如何点燃IO密集型任务,让CPU密集型任务也加速狂奔?
燃烧吧,Python!异步编程如何点燃IO密集型任务,让CPU密集型任务也加速狂奔?
12 2
|
7天前
|
存储 机器人 Linux
Netty(二)-服务端网络编程常见网络IO模型讲解
Netty(二)-服务端网络编程常见网络IO模型讲解
|
8天前
|
机器学习/深度学习 人工智能 算法
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台。果蔬识别系统,本系统使用Python作为主要开发语言,通过收集了12种常见的水果和蔬菜('土豆', '圣女果', '大白菜', '大葱', '梨', '胡萝卜', '芒果', '苹果', '西红柿', '韭菜', '香蕉', '黄瓜'),然后基于TensorFlow库搭建CNN卷积神经网络算法模型,然后对数据集进行训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地文件方便后期调用。再使用Django框架搭建Web网页平台操作界面,实现用户上传一张果蔬图片识别其名称。
25 0
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
下一篇
无影云桌面