Python使用grequests并发发送请求的示例
前言
requests是python发送接口请求非常好用的一个三方库,由k神编写,简单,方便上手快。但是requests发送请求是串行的,即阻塞的。发送完一条请求才能发送另一条请求。
为了提升测试效率,一般我们需要并行发送请求。这里可以使用多线程,或者协程,gevent或者aiohttp,然而使用起来,都相对麻烦。
grequests是k神基于gevent+requests编写的一个并发发送请求的库,使用起来非常简单。
安装方法: pip install gevent 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爬虫获取offcn上的公考信息及写入Excel表格并发送至指定邮箱
-
python使用scrapy发送post请求的坑
-
python 使用 requests 模块发送http请求 的方法
-
在python中使用requests 模拟浏览器发送请求数据的方法
-
python 发送邮件的示例代码(Python2/3都可以直接使用)
-
python爬虫使用requests发送post请求示例详解
-
PHP使用curl_multi实现并发请求的方法示例
-
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
-
nodejs使用http模块发送get与post请求的方法示例
-
Python如何获得百度统计API的数据并发送邮件示例代码