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

 更新时间:2020年11月05日 15:50:56   作者:临渊  
这篇文章主要介绍了Python使用grequests并发送请求的示例,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下

前言

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使用筛选法计算小于给定数字的所有素数

    这篇文章主要为大家详细介绍了python使用筛选法计算小于给定数字的所有素数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • 用Python实现命令行闹钟脚本实例

    用Python实现命令行闹钟脚本实例

    今天我们讲一下用Python写的一个小脚本。这是一个可以在命令行运行的闹钟脚本,对于日常大家工作很实用,有需要的朋友们可以参考借鉴。
    2016-09-09
  • django2.2 和 PyMySQL版本兼容问题

    django2.2 和 PyMySQL版本兼容问题

    这篇文章主要介绍了django2.2 和 PyMySQL版本兼容问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • django用户登录验证的完整示例代码

    django用户登录验证的完整示例代码

    这篇文章主要给大家介绍了关于django用户登录验证的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring django具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • Python文件基本操作实用指南

    Python文件基本操作实用指南

    这篇文章主要给大家介绍了Python文件基本操作的相关资料,其中包括打开文件的方式、按行读取文件内容、复制文件、重命名文件等操作需要的朋友可以参考下
    2021-05-05
  • numpy 返回函数的上三角矩阵实例

    numpy 返回函数的上三角矩阵实例

    今天小编就为大家分享一篇numpy 返回函数的上三角矩阵实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Python面向对象程序设计之私有属性及私有方法示例

    Python面向对象程序设计之私有属性及私有方法示例

    这篇文章主要介绍了Python面向对象程序设计之私有属性及私有方法,结合实例形式分析了Python私有属性及私有方法的相关使用方法及操作注意事项,需要的朋友可以参考下
    2019-04-04
  • Python函数实现学员管理系统

    Python函数实现学员管理系统

    这篇文章主要为大家详细介绍了Python函数实现学员管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Python读取CSV文件并计算某一列的均值和方差

    Python读取CSV文件并计算某一列的均值和方差

    这篇文章主要介绍了利用Python读取CSV文件并计算某一列的均值和方差,这里利用了csv模块来对文件进行处理,文章通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • Django实现文件上传和下载功能

    Django实现文件上传和下载功能

    这篇文章主要为大家详细介绍了Django下完成文件上传和下载功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10

最新评论