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

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

本文介绍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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。