讲师中心 微信公众号
AI工具推荐 视频效率加速

Python接口请求如何优化_批量请求与异常处理技巧【教学】

夜枫同学_8480

夜枫同学_8480

发布时间:2025-12-18 17:21:06

|

531人浏览过

|

来源于php中文网

原创

Python批量请求需用Session复用连接、ThreadPoolExecutor并发、分层捕获异常并统一收口结果。关键包括:连接池调优、线程安全复用Session、按错误类型重试、结构化存储成败结果。

python接口请求如何优化_批量请求与异常处理技巧【教学】

Python调用接口时,批量请求和异常处理是提升稳定性和效率的关键。单纯用requests.get()逐个发请求,既慢又容易崩——尤其面对几十上百个URL时。核心思路就两条:并发控制 + 稳健容错。

用requests.Session复用连接,减少开销

每次新建requests.get()都会重建TCP连接、TLS握手,耗时明显。换成Session对象,能自动复用底层连接,尤其适合批量请求同一域名的场景。

说明:
- Session会缓存连接池,默认保持10个空闲连接;
- 同一Session发出的请求,若Host相同,大概率复用已有连接;
- 配合mount可为HTTP/HTTPS定制Adapter(比如设置最大连接数)。

建议写法:

import requests
<p>session = requests.Session()</p><p><span>立即学习</span>“<a href="https://pan.quark.cn/s/00968c3c2c15" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">Python免费学习笔记(深入)</a>”;</p><h1>可选:调整连接池大小(避免TooManyRedirects或ConnectionPoolSizeError)</h1><p>adapter = requests.adapters.HTTPAdapter(pool_connections=20, pool_maxsize=20)
session.mount('http://', adapter)
session.mount('https://', adapter)</p><p>urls = ['<a href="https://www.php.cn/link/cf24f44a79866351337c1b317ffdc18d">https://www.php.cn/link/cf24f44a79866351337c1b317ffdc18d</a>', '<a href="https://www.php.cn/link/abc58d2523df2aea708a509fbd201437">https://www.php.cn/link/abc58d2523df2aea708a509fbd201437</a>']
for url in urls:
try:
resp = session.get(url, timeout=5)
resp.raise_for_status()
print(resp.json())
except requests.exceptions.RequestException as e:
print(f"请求失败 {url}:{e}")

并发请求别硬上asyncio,先试试ThreadPoolExecutor

多数业务接口是IO密集型,用多线程比多进程更轻量,也比手写async更易维护。Python标准库concurrent.futures.ThreadPoolExecutor足够应对几百以内的并发量。

Json Repair Kit
Json Repair Kit

使用 Node.js 评估修复格式错误的 JSON,自动纠正尾随逗号、单引号、未加引号的键等常见问题,实现文件规范化。

下载

关键点:
- 控制max_workers(通常设为CPU核数×2~5,或根据目标服务器承载力调低);
- 每个worker内仍用Session,避免连接池竞争;
- 用as_completed实时获取结果,不阻塞等待全部完成。

示例结构:

from concurrent.futures import ThreadPoolExecutor, as_completed
<p>def fetch_one(session, url):
try:
resp = session.get(url, timeout=8)
resp.raise_for_status()
return {'url': url, 'status': 'success', 'data': resp.json()}
except Exception as e:
return {'url': url, 'status': 'error', 'error': str(e)}</p><h1>复用Session实例(注意:Session不是线程安全的,但用于GET基本无问题;如需绝对安全,可在每个worker里新建)</h1><p>with ThreadPoolExecutor(max_workers=10) as executor:
futures = [executor.submit(fetch_one, session, url) for url in urls]
for future in as_completed(futures):
result = future.result()
if result['status'] == 'success':
print("✅", result['url'])
else:
print("❌", result['url'], result['error'])

异常要分层捕获,别只靠try-except包全局

接口请求失败原因多样,统一用一个except Exception掩盖细节,调试和重试策略都会失效。应按错误类型分层处理:

  • 网络层异常:如ConnectionError、Timeout——适合立即重试(加退避);
  • 协议/响应异常:如HTTPError(4xx/5xx)——4xx一般不重试,5xx可考虑重试;
  • 解析异常:如JSONDecodeError——说明返回非预期格式(可能是HTML错误页),需记录原始resp.text排查;
  • 业务逻辑异常:如API返回{"code": 4001, "msg": "余额不足"}——属于正常业务流,不应进except,而应在response后判断字段。

推荐做法:封装一个带基础重试和分类日志的请求函数:

import time
import logging
from requests.exceptions import ConnectionError, Timeout, HTTPError
<p>def safe_get(session, url, max_retries=2, backoff_factor=1):
for i in range(max_retries + 1):
try:
resp = session.get(url, timeout=10)
resp.raise_for_status()
return resp
except ConnectionError:
if i == max_retries:
raise
logging.warning(f"连接失败 {url},{backoff_factor * (2 <strong> i)}s后重试")
time.sleep(backoff_factor * (2 *<em> i))
except Timeout:
if i == max_retries:
raise
logging.warning(f"超时 {url},重试中...")
time.sleep(backoff_factor </em> (2 </strong> i))
except HTTPError as e:
if resp.status_code >= 500 and i < max_retries:
logging.warning(f"服务端错误 {url}({resp.status_code}),重试...")
time.sleep(backoff_factor * (2 ** i))
continue
raise  # 4xx直接抛出

批量结果要统一收口,别让异常中断整个流程

批量请求的目标不是“全成功”,而是“可知可控”——哪怕100个里失败20个,也要明确知道哪20个、为什么失败、返回什么原始信息。

建议:
- 结果用字典或命名元组存储,含url、status('success'/'failed')、response(成功时为json dict,失败时为exception或原始resp);
- 失败项单独写入log文件或数据库,包含url、timestamp、error_type、error_msg、response_text(如有);
- 最终汇总打印成功数/失败数/平均耗时,方便快速评估批次质量。

不复杂但容易忽略。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2175

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3402

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1136

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

3899

2025.09.10

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

580

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

876

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

1926

2025.08.19

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

3168

2023.10.19

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn