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中global与nonlocal比较
Nov 21 Python
分析Python中设计模式之Decorator装饰器模式的要点
Mar 02 Python
Python下实现的RSA加密/解密及签名/验证功能示例
Jul 17 Python
python 信息同时输出到控制台与文件的实例讲解
May 11 Python
Python装饰器用法实例总结
May 26 Python
pytorch对可变长度序列的处理方法详解
Dec 08 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
Dec 30 Python
Django Rest framework频率原理与限制
Jul 26 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
Aug 30 Python
PyCharm使用之配置SSH Interpreter的方法步骤
Dec 26 Python
Pyinstaller 打包发布经验总结
Jun 02 Python
python缺失值的解决方法总结
Jun 09 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
php echo()和print()、require()和include()函数区别说明
2010/03/27 PHP
php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
2011/11/02 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
2013/06/03 PHP
php批量删除数据库下指定前缀的表以prefix_为例
2014/08/24 PHP
基于JQuery的asp.net树实现代码
2010/11/30 Javascript
JS时间选择器 兼容IE6,7,8,9
2012/06/26 Javascript
提交按钮的name='submit'引起的js失效问题及原因
2015/02/25 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
2016/01/12 Javascript
JavaScript代码里的判断小结
2016/08/22 Javascript
实时监控input框,实现输入框与下拉框联动的实例
2018/01/23 Javascript
webpack组织模块打包Library的原理及实现
2018/03/10 Javascript
在vue组件中使用axios的方法
2018/03/16 Javascript
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
2018/09/13 Javascript
vuex 解决报错this.$store.commit is not a function的方法
2018/12/17 Javascript
浅谈Vue服务端渲染框架Nuxt的那些事
2018/12/21 Javascript
nodejs中方法和模块用法示例
2018/12/24 NodeJs
解决vue elementUI中table里数字、字母、中文混合排序问题
2020/01/07 Javascript
使用webpack搭建pixi.js开发环境
2020/02/12 Javascript
vue中的过滤器及其时间格式化问题
2020/04/09 Javascript
vue-model实现简易计算器
2020/08/17 Javascript
js实现飞机大战小游戏
2020/08/26 Javascript
pycharm 使用心得(六)进行简单的数据库管理
2014/06/06 Python
django rest framework之请求与响应(详解)
2017/11/06 Python
Python排序搜索基本算法之插入排序实例分析
2017/12/11 Python
Python爬虫实现百度图片自动下载
2018/02/04 Python
python中将\\uxxxx转换为Unicode字符串的方法
2018/09/06 Python
浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
2019/03/11 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
python pycharm的安装及其使用
2019/10/11 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
2020/12/14 Python
使用css3 属性如何丰富图片样式(圆角 阴影 渐变)
2012/11/22 HTML / CSS
高校辅导员推荐信范文
2013/12/25 职场文书
运动会广播稿100字
2014/01/11 职场文书
环保倡议书范文
2014/05/12 职场文书
校园活动策划方案
2014/06/13 职场文书
委托书的写法
2014/08/30 职场文书