Python grequests库实现高并发HTTP请求详解

键盘旁的猫
键盘旁的猫
发布时间:2026-10-13 | 2人浏览过
原创

本文介绍Python中grequests库的使用,该库基于gevent和requests实现高并发HTTP请求。通过对比串行与并行请求的性能差异,展示grequests在提升测试效率方面的优势,并详细讲解异常处理机制。

grequests库简介与安装

前言

requests是Python中用于发送接口请求的优秀第三方库,由K神开发,具有简单易用、上手快的特点。然而,requests默认采用串行模式发送请求,即阻塞式执行,必须等待当前请求完成才能发起下一个请求。

为了提高测试效率,通常需要使用并行方式发送请求。虽然可以使用多线程、协程、gevent或aiohttp等技术实现,但这些方案的使用复杂度相对较高。

grequests是K神基于gevent和requests封装开发的并发请求库,其最大优势在于使用极其简便。

安装方法:pip install gevent grequests

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

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 相关产品和应用

全部下载

专题列表