通常在进行网络数据采集时候我们会用到requests,urllib等模块,但是这些模块在使用中并不支持异步,所以今天我们介绍一个支持异步网络请求的模块aiohttp.

首先我们使用flask简单的搭一个服务器:

from flask import Flask

app = Flask(__name__)

@app.route('/xiaohua')
def xiaohua():
return 'i am xiaohua' @app.route('/xiaohuang')
def xiaohuang():
return 'i am xiaohuang' @app.route('/xiaoming')
def xiaoming():
return 'i am xiaoming' if __name__ == '__main__':
app.run()  

下面是通过aiohttp进行的异步访问 :

import aiohttp
import time
import asyncio async def get_page(url): #加async关键字,使函数返回一个协程对象
async with aiohttp.ClientSession() as session: #创建ClientSession对象
async with await session.get(url=url) as response: #将url传入get方法并赋值到response
page_text = await response.text() #遇IO手动挂起
print(page_text)
start = time.time()
urls = [
'http://127.0.0.1:5000/xiaohua',
'http://127.0.0.1:5000/xiaoming',
'http://127.0.0.1:5000/xiaohuang',
'http://127.0.0.1:5000/xiaohua',
'http://127.0.0.1:5000/xiaoming',
'http://127.0.0.1:5000/xiaohuang',
'http://127.0.0.1:5000/xiaohua',
'http://127.0.0.1:5000/xiaoming',
'http://127.0.0.1:5000/xiaohuang', ]
tasks = []
loop = asyncio.get_event_loop() #创建事件循环
for url in urls:
c = get_page(url) #接收协程对象
task = asyncio.ensure_future(c) #对协程对象进一步封装成future
tasks.append(task)
loop.run_until_complete(asyncio.wait(tasks)) #将多个任务对象对应的列表注册到事件循环中,需使用asyncio.wait进行逐一取值
print('总耗时:',time.time()-start)

结果 :

i am xiaoming
i am xiaoming
i am xiaohuang
i am xiaoming
i am xiaohua
i am xiaohuang
i am xiaohuang
i am xiaohua
i am xiaohua
总耗时: 0.018949031829833984

  从结果可以看出,通过使用aiohttp模块,访问实现了异步访问,大大提高了效率.

aiohttp 支持异步的网络请求模块的更多相关文章

  1. aiohttp你不知道的异步操作网络请求

    aiohttp支持异步操作的网络请求的模块 1.一个简单异步协程爬取 read() text(encoding=编码) 比如:await r.text(encoding="utf-8&quo ...

  2. Python 网络请求模块 urllib 、requests

    Python 给人的印象是抓取网页非常方便,提供这种生产力的,主要依靠的就是 urllib.requests这两个模块. urlib 介绍 urllib.request 提供了一个 urlopen 函 ...

  3. iOS开发简记(7):网络请求模块

    主流的APP都少不了跟服务器交互,网络请求是少不了的事情. 开源的网络请求库,有很多,比如:AFNetworking.YTKNetwork.PPNetworkHelper.ASIHttpRequest ...

  4. vue(24)网络请求模块axios使用

    什么是axios Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. 主要的作用:axios主要是用于向后台发起请求的,还有在请求中做更多是可控功能. a ...

  5. axios网络封装模块

    功能特点 在浏览器中发送XMLHttpRequests请求 在node.js总发送http请求 支持Promise API 拦截请求和相应 转换请求和响应数据 axios请求方式 支持多种请求方式 a ...

  6. iOS 多个异步网络请求全部返回后再执行具体逻辑的方法

    对于dispatch多个异步操作后的同步方法,以前只看过dispatch_group_async,看看这个方法的说明: * @discussion * Submits a block to a dis ...

  7. iOS NSURLConnection和异步网络请求

    在日常应用中,我们往往使用AFNetworking等第三方库来实现网络请求部分.这篇文章会简要地介绍一下如何使用NSURLConnection来进行异步的网络请求. 我们先看一个小demo - (vo ...

  8. iOS 多网络请求同步并发

    iOS中经常会用到多线程,在多线程中有一个线程组的概念(group),创建多个线程组任务,多组任务都完成之后,就会进入dispatch_group_notify队列中. 同时多线程中还有一个信号量的概 ...

  9. charles重发网络请求&模拟慢速网络&过滤网络请求

    重发网络请求&模拟慢速网络&过滤网络请求 重发网络请求:后端调试的过程中,一直在客户端进行点点点比较麻烦,此时直接发送请求比较方便查看调试后的结果 模拟慢速网络:用户的网络不能一直是快 ...

随机推荐

  1. Python 机器学习库 NumPy 教程

    0 Numpy简单介绍 Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy.matplotlib一起使用.其实,list已经提供了类似于矩阵的表示形式,不过numpy ...

  2. JDBC缓冲池配置druid.properties

    driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mytest?characterEncoding=UTF-8 ...

  3. Java基础笔试练习(二)

    1. HashMap的数据结构是怎样的? A.数组 B.链表 C.数组+链表 D.二叉树 答案: C 解析: JDK8以后,HashMap的数据结构是数组+链表+红黑树 2. 在 JAVA 编程中,J ...

  4. Word 带圈字符 1~20 快捷键的输入的技巧

    1. 前言 如何在Word中输入带圈数字?为大家分享一种快速录入带圈字符的方法,就是使用快捷键. 2. 输入带圈字符 1.在Word中输入2465,然后使用快捷键「ALT + X」就能变成⑥:输入24 ...

  5. triples I(按位或运算及3的特性)(2019牛客暑期多校训练营(第四场)D)

    示例1: 输入: 2 3 7 输出: 1 32 3 6 说明:3=3, (3|6)=7 题意:输出尽可能少的数字,他们的按位或结果为输入的数字a. 题解:(表示看不懂题解,看山东大佬的代码看懂的)首先 ...

  6. 使用脚本将AspNetCore发布到IIS上

    首先你必须要了解的是,没有脚本的情况下,如何把AspNetCore的应用发布到IIS上. 大致分为这些步骤: 安装MS C++ 2015 x86&x64 安装正确版本的.NET Core Ru ...

  7. Java Embeded 包 与各个架构之间的关系

    Oracle Java Embedded Suite 7.0 for Linux x86        V37917-01.zip        Oracle Java Embedded Suite ...

  8. Advanced REST Client 的安装

    1.解压Advanced-REST-client_v3.1.9.zip到当前文件夹,得到Advanced-REST-client_v3.1.9目录      2.在Chrome浏览器中打开:chrom ...

  9. hdu 2102 a计划问题。。 双层dfs问题

    Problem Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长 ...

  10. beego 框架基本使用 && 知识点整理

    beego 官网的教程已经整理的非常详细了,但作为一个刚接触的学习者,还是有必要做一下整理,这样在后面使用的时候遇到了不太熟悉的地方,还能反过头来看下自己整理的内容,快速的把知识再捞回来,下面是对官网 ...