Python使用grequests并发发送请求的示例


Posted in Python onNovember 05, 2020

前言

requests是Python发送接口请求非常好用的一个三方库,由K神编写,简单,方便上手快。但是requests发送请求是串行的,即阻塞的。发送完一条请求才能发送另一条请求。
为了提升测试效率,一般我们需要并行发送请求。这里可以使用多线程,或者协程,gevent或者aiohttp,然而使用起来,都相对麻烦。

grequests是K神基于gevent+requests编写的一个并发发送请求的库,使用起来非常简单。

安装方法: pip install gevent grequests
项目地址:https://github.com/spyoungtech/grequests

grequests简单使用

首先构造一个请求列表,使用grequests.map()并行发送,得到一个响应列表。示例如下。

import grequests

req_list = [ # 请求列表
 grequests.get('http://httpbin.org/get?a=1&b=2'),
 grequests.post('http://httpbin.org/post', data={'a':1,'b':2}),
 grequests.put('http://httpbin.org/post', json={'a': 1, 'b': 2}),
]

res_list = grequests.map(req_list) # 并行发送,等最后一个运行完后返回
print(res_list[0].text) # 打印第一个请求的响应文本

grequests支持get、post、put、delete等requests支持的HTTP请求方法,使用参数和requests一致,发送请求非常简单。
通过遍历res_list可以得到所有请求的返回结果。

grequests和requests性能对比

我们可以对比下requests串行和grequests并行请求100次github.com的时间,示例如下。
使用requests发送请求

import requests
import time

start = time.time()
res_list = [requests.get('https://github.com') for i in range(100)]
print(time.time()-start)

实际耗时约100s+

使用grequests发送

import grequests
import time

start = time.time()
req_list = [grequests.get('https://github.com') for i in range(100)]
res_list = grequests.map(req_list)
print(time.time()-start)

际耗时约3.58s

异常处理

在批量发送请求时难免遇到某个请求url无法访问或超时等异常,grequests.map()方法还支持自定义异常处理函数,示例如下。

import grequests

def err_handler(request, exception):
 print("请求出错")

req_list = [
 grequests.get('http://httpbin.org/delay/1', timeout=0.001), # 超时异常
 grequests.get('http://fakedomain/'), # 该域名不存在
 grequests.get('http://httpbin.org/status/500') # 正常返回500的请求
]

res_list = grequests.map(reqs, exception_handler=err_handler)
print(res_list)

运行结果:

请求出错
请求出错
[None, None, <Response [500]>]

以上就是Python使用grequests并发发送请求的示例的详细内容,更多关于Python grequests发送请求的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python实现动态添加类的属性或成员函数的解决方法
Jul 16 Python
python生成IP段的方法
Jul 07 Python
python实现读取excel写入mysql的小工具详解
Nov 20 Python
TensorFlow如何实现反向传播
Feb 06 Python
Python实现的多项式拟合功能示例【基于matplotlib】
May 15 Python
Python 取numpy数组的某几行某几列方法
Oct 24 Python
python3反转字符串的3种方法(小结)
Nov 07 Python
pytorch中tensor张量数据类型的转化方式
Dec 31 Python
Python发送手机动态验证码代码实例
Feb 28 Python
使用python计算三角形的斜边例子
Apr 15 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
May 27 Python
python如何写个俄罗斯方块
Nov 06 Python
Python 实现图片转字符画的示例(静态图片,gif皆可)
Nov 05 #Python
Python中常用的os操作汇总
Nov 05 #Python
Python Web项目Cherrypy使用方法镜像
Nov 05 #Python
Python实现异步IO的示例
Nov 05 #Python
Python requests HTTP验证登录实现流程
Nov 05 #Python
Python包资源下载路径报404解决方案
Nov 05 #Python
如何一键升级Python所有包
Nov 05 #Python
You might like
Apply an AutoFormat to an Excel Spreadsheet
2007/06/12 Javascript
jQuery select控制插件
2009/08/17 Javascript
js闭包实例汇总
2014/11/09 Javascript
Js可拖拽放大的层拖动特效实现方法
2015/02/25 Javascript
浅谈JavaScript中的string拥有方法的原因
2015/08/28 Javascript
基于Jquery制作图片文字排版预览效果附源码下载
2015/11/18 Javascript
详解js中class的多种函数封装方法
2016/01/03 Javascript
JavaScript实现输入框与清空按钮联动效果
2016/09/09 Javascript
不间断循环滚动效果的实例代码(必看篇)
2016/10/08 Javascript
基于JavaScript实现Tab选项卡切换效果
2016/11/24 Javascript
JavaScript函数表达式详解及实例
2017/05/05 Javascript
vue.js开发实现全局调用的MessageBox组件实例代码
2017/11/22 Javascript
基于element-ui组件手动实现单选和上传功能
2018/12/06 Javascript
vuejs移动端实现div拖拽移动
2019/07/25 Javascript
vue组件中实现嵌套子组件案例
2020/08/31 Javascript
[01:46]2020完美世界全国高校联赛秋季赛报名开启
2020/10/15 DOTA
django输出html内容的实例
2018/05/27 Python
Python 字符串与二进制串的相互转换示例
2018/07/23 Python
python os.path模块常用方法实例详解
2018/09/16 Python
python多线程共享变量的使用和效率方法
2019/07/16 Python
Django多数据库的实现过程详解
2019/08/01 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
2020/02/18 Python
基于Numba提高python运行效率过程解析
2020/03/02 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
2021/01/29 Python
css3实现动画的三种方式
2020/08/24 HTML / CSS
HTML5本地存储localStorage、sessionStorage基本用法、遍历操作、异常处理等
2014/05/08 HTML / CSS
伦敦眼门票在线预订:London Eye
2018/05/31 全球购物
轻松制作精彩视频:Animoto
2018/09/19 全球购物
英国在线药房和在线医生:LloydsPharmacy
2019/10/21 全球购物
美术专业学生个人自我评价
2013/09/19 职场文书
应届生人事助理求职信
2013/11/09 职场文书
小学关爱留守儿童活动方案
2014/08/25 职场文书
2015年公司行政后勤工作总结
2015/05/20 职场文书
寻找成龙观后感
2015/06/12 职场文书
使用Ajax实现进度条的绘制
2022/04/07 Javascript
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
2022/04/18 MySQL