Python如何使用grequests (gevent +请求)并发发送请求

  介绍

这篇文章将为大家详细讲解有关Python如何使用grequests (gevent +请求)并发发送请求,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

<强>前言

请求是Python发送接口请求非常好用的一个三方库,由K神编写,简单,方便上手快。但是请求发送请求是串行的,即阻塞的。发送完一条请求才能发送另一条请求。

为了提升测试效率,一般我们需要并行发送请求。这里可以使用多线程,或者协程,gevent或者aiohttp,然而使用起来,都相对麻烦。

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

安装方法:pip安装gevent grequests

项目地址:https://github.com/spyoungtech/grequests

<强> grequests简单使用

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

import  grequests   时间=req_list [#,才能请求列表   grequests.get才能(& # 39;http://httpbin.org/get?a=1& b=2 & # 39;),   grequests.post才能(& # 39;http://httpbin.org/post& # 39;,, data=https://www.yisu.com/zixun/{“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支持,邮报》说,删除等请求支持的HTTP请求方法,使用参数和请求一致,发送请求非常简单。
通过遍历res_list可以得到所有请求的返回结果。

<强> grequests和请求性能对比

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

使用请求发送请求

import 请求   import 时间   时间=start  time.time ()   时间=res_list  [requests.get (& # 39; https://github.com& # 39;), for 小姐:拷贝范围(100))   print (time.time()实体法)

实际耗时约100年代+

使用grequests发送

import  grequests   import 时间      时间=start  time.time ()   时间=req_list  [grequests.get (& # 39; https://github.com& # 39;), for 小姐:拷贝范围(100))   时间=res_list  grequests.map (req_list)   print (time.time()实体法)

实际耗时约3.58 s

<强>异常处理

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

import  grequests   def  err_handler(请求,,除外):   打印才能(“请求出错“)   req_list =, (   grequests.get才能(& # 39;http://httpbin.org/delay/1& # 39;,,超时=0.001),,,#,超时异常   grequests.get才能(& # 39;http://fakedomain/& # 39;),,, #,该域名不存在   grequests.get才能(& # 39;http://httpbin.org/status/500& # 39;),, #,正常返回500的请求   ]   时间=res_list  grequests.map(请求,exception_handler=err_handler)   打印(res_list)

运行结果:

请求出的错   请求出错   (没有,没有,,& lt; Response [500]祝辞]

Python如何使用grequests (gevent +请求)并发发送请求