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实现baidu hi自动登录的代码
Feb 10 Python
关于Python中空格字符串处理的技巧总结
Aug 10 Python
NLTK 3.2.4 环境搭建教程
Sep 19 Python
如何利用Anaconda配置简单的Python环境
Jun 24 Python
django Admin文档生成器使用详解
Jul 22 Python
python3.5 cv2 获取视频特定帧生成jpg图片
Aug 28 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
Dec 10 Python
PyTorch中model.zero_grad()和optimizer.zero_grad()用法
Jun 24 Python
解决TensorFlow程序无限制占用GPU的方法
Jun 30 Python
python学习笔记之多进程
Aug 06 Python
Python threading模块condition原理及运行流程详解
Oct 05 Python
详解Python类和对象内容
Jun 22 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
php5.3中连接sqlserver2000的两种方法(com与ODBC)
2012/12/29 PHP
php-perl哈希算法实现(times33哈希算法)
2013/12/30 PHP
PHP反射机制用法实例
2014/08/28 PHP
变量在 PHP7 内部的实现(二)
2015/12/21 PHP
分享php多功能图片处理类
2016/05/15 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
thinkphp集成前端脚手架Vue-cli的教程图解
2018/08/30 PHP
通用于ie和firefox的函数 GetCurrentStyle (obj, prop)
2006/12/27 Javascript
table对象中的insertRow与deleteRow使用示例
2014/01/26 Javascript
JS判断、校验MAC地址的2个实例
2014/05/05 Javascript
JavaScript闭包函数访问外部变量的方法
2014/08/27 Javascript
Javascript实现网络监测的方法
2015/07/31 Javascript
js插件dropload上拉下滑加载数据实例解析
2016/07/27 Javascript
React实现双向绑定示例代码
2016/09/19 Javascript
jQuery实现文章图片弹出放大效果
2017/04/06 jQuery
关于vue.js过渡css类名的理解(推荐)
2017/04/10 Javascript
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
vue之数据交互实例代码
2017/06/16 Javascript
Angular数据绑定机制原理
2018/04/17 Javascript
JS实现table表格内针对某列内容进行即时搜索筛选功能
2018/05/11 Javascript
iView-admin 动态路由问题的解决方法
2018/10/03 Javascript
Python程序员鲜为人知但你应该知道的17个问题
2014/06/04 Python
python的Template使用指南
2014/09/11 Python
Windows系统下使用flup搭建Nginx和Python环境的方法
2015/12/25 Python
Python简单实现两个任意字符串乘积的方法示例
2018/04/12 Python
对python中使用requests模块参数编码的不同处理方法
2018/05/18 Python
pyqt5实现登录界面的模板
2020/05/30 Python
Python中turtle库的使用实例
2019/09/09 Python
Django跨域资源共享问题(推荐)
2020/03/09 Python
keras 获取某层输出 获取复用层的多次输出实例
2020/05/23 Python
英国舒适型鞋履品牌:FitFlop
2017/05/17 全球购物
如何定义一个可复用的服务
2014/09/30 面试题
自荐信的五个重要部分
2013/10/29 职场文书
毕业生护理专业个人求职信范文
2014/01/04 职场文书
运动会宣传口号
2014/06/09 职场文书