requests库是python一个优秀的HTTP库,使用它可以非常简单地执行HTTP的各种操作,例如GET、POST等。不过,这个库所执行的网络请求都是同步了,即cpu发出请求指令后,IO执行发送和等待等操作,在这段IO执行的时间里,cpu什么也不做,这样cpu的计算能力就被浪费了。所以,可以尝试把网络请求修改为异步的,也就是在IO发挥作用的这段时间,CPU去做这个程序里的其他事情,等IO收到响应的数据,CPU回来处理。偶然发现下面的帖子特分享与大家,并与requests库进行简单响应速度比较:

建议先阅读原博主文章:

感谢原博主的分享精神,转到原博地址:  HTTPS://WWW.LETIANTIAN.ME/2014-10-04-ASYNCHRONOUS-REQUESTS/

重要参数:

这里需要补充的是几个grequests的重要参数:

def grequests.map(requests, stream=False, size=None, exception_handler=None, gtimeout=None) 
参数 说明 备注
size 协程的并发度 当一个协程进行IO等待的时候,就会将CPU交给其他协程序,一般设置为50 ~ 100足矣
exception_handler 协程的并发度 捕获单个请求的异常
gtimeout 整体请求的超时设置

-----------------------------------华丽的分割线-----------------------------------------------------------------------

下面是对 grequests库和requests库的响应比较

pasting

# -*- coding: utf-8 -*-
import grequests
import time
import requests
import cProfile
import sys
reload(sys)
sys.setdefaultencoding('utf-8') # 同网络环境下比较结果 def exception_handler(request, exception):
"""单个请求错误提示"""
print '请求错误'
urls = ['http://letiantian.me/'] * 10 def test1(urls): # ------------------- grequests 库请求-------------------------------------
reqs = [grequests.get(url) for url in urls] # 用时1秒左右
response = grequests.map(reqs, exception_handler=exception_handler)
# print response[9].status_code
return response def test2(urls):
# ------------------- requests 库请求-------------------------------------
reqs = [requests.get(url) for url in urls] # 用时7秒
return reqs cProfile.run("test1(urls)")
cProfile.run("test2(urls)")
2/1 0.001 0.000 1.645 1.645 <string>:1(<module>) # test1
2/1 0.000 0.000 12.089 12.089 <string>:1(<module>)  # test2

异步请求Python库 grequests的应用和与requests库的响应速度的比较的更多相关文章

  1. Python爬虫入门(二)之Requests库

    Python爬虫入门(二)之Requests库 我是照着小白教程做的,所以该篇是更小白教程hhhhhhhh 一.Requests库的简介 Requests 唯一的一个非转基因的 Python HTTP ...

  2. Python爬虫小白入门(二)requests库

    一.前言 为什么要先说Requests库呢,因为这是个功能很强大的网络请求库,可以实现跟浏览器一样发送各种HTTP请求来获取网站的数据.网络上的模块.库.包指的都是同一种东西,所以后文中可能会在不同地 ...

  3. python之爬虫(四)之 Requests库的基本使用

    什么是Requests Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库如果你看过上篇文章关于urllib库的使用,你会发现,其 ...

  4. python爬虫知识点总结(四)Requests库的基本使用

    官方文档:http://docs.python-requests.org/en/master 安装方法 命令行下输入:pip3 install requests.详见:https://www.cnbl ...

  5. [python爬虫]Requests-BeautifulSoup-Re库方案--Requests库介绍

    [根据北京理工大学嵩天老师“Python网络爬虫与信息提取”慕课课程编写  文章中部分图片来自老师PPT 慕课链接:https://www.icourse163.org/learn/BIT-10018 ...

  6. python爬虫之一:requests库

    目录 安装requtests requests库的连接异常 HTTP协议 HTTP协议对资源的操作 requests库的7个主要方法 request方法 get方法 网络爬虫引发的问题 robots协 ...

  7. 爬虫请求库之requests库

    一.介绍 介绍:使用requests可以模拟浏览器的请求,比之前的urllib库使用更加方便 注意:requests库发送请求将网页内容下载下来之后,并不会执行js代码,这需要我们自己分析目标站点然后 ...

  8. python导入requests库一直报错原因总结 (文件名与库名冲突)

    花了好长时间一直在搞这个 源代码: 一直报如下错误: 分析原因: 总以为没有导入requests库,一直在网上搜索各种的导入库方法(下载第三方的requests库,用各种命令工具安装),还是报错 后来 ...

  9. python接口测试之requests库(一)

    一.requests库的安装 requests库作为第三方库,需要安装 cmd模式下,运行pip install requests 二.在学习如何发送请求之前,我们先来了解一下requests库,查看 ...

随机推荐

  1. ruby 条件判断&循环控制

    参考:https://www.jb51.net/article/66709.htm

  2. 最小化的测试套件minimal_test的使用

    1:需要包含文件文#include <boost/test/minimal_test.hpp> 2:minimal_test内部实现了main(), 因此无需自己编写main()函数, 只 ...

  3. 引用ZXing生成二维码

    1.生成二维码 ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口. Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码.本文引用 ...

  4. linux如何制作程序桌面快捷方式

    1.生成通过apt或者dpkg安装的程序的桌面快捷方式 他们的快捷方式在/usr/share/applications中,比如我们要生成火狐的桌面快捷方式,执行下列命令 cp /usr/share/a ...

  5. 用label实现横向瀑布流的方法

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXcAAAKxCAIAAAAn+3udAAAKqWlDQ1BJQ0MgUHJvZmlsZQAASImVlg

  6. 1030: [JSOI2007]文本生成器

    1030: [JSOI2007]文本生成器 https://www.lydsy.com/JudgeOnline/problem.php?id=1030 分析: AC自动机+dp. 正难则反,求满足的, ...

  7. web之前端获取上传图片并展示

    1.html中经常存在图片上传的问题,但是后续的展示基本上是通过后台输出流的方式来呈现的.但是这样耗费的资源比较多.所以这里学习了一种前端直接展示图片的方式(供参考). 2.html的编写方式比较简单 ...

  8. CakePHP 总结

    1. 处理任何保存或获取数据的操作最好都写在模型(Model)中.这个概念通常被称为fat model. 2. 返回上一条插入记录的ID, $this->Example->getInser ...

  9. vscode 全透明背景图

    一.前言 08.02更新:已魔改插件 可以直接下载插件使用了 10.18跟新:已发布到vscode扩展  下载地址 下载后手动安装就ok了,具体配置安装后点开插件有说明的!!! 今天看到了博客园 这篇 ...

  10. dubbo入门(一)

    1.简介 Dubbo由阿里巴巴开源,是一个分布式服务框架,致力于提供高性能和透明化的RPC(远程过程调用)远程服务调用方案,以及SOA服务治理方案.如果没有分布式的需求,Dbubbo是不需要的,其本质 ...