0

0

Python HTTP 连接池的工作机制

舞姬之光

舞姬之光

发布时间:2026-02-14 21:33:15

|

602人浏览过

|

来源于php中文网

原创

requests默认使用连接池是因为底层urllib3默认启用连接池,每次请求复用tcp连接以减少握手开销;默认池大小为10,空闲连接保留120秒,服务端返回connection: close时立即移除连接。

python http 连接池的工作机制

requests 为什么默认用连接池

因为 requests 底层用的是 urllib3,而 urllib3 默认启用连接池——不是“可选功能”,是它处理 HTTP 请求的默认方式。不手动干预时,每次调用 requests.get() 都会尝试复用已有 TCP 连接,而不是每次都新建。

这能省掉三次握手、TLS 握手开销,尤其在高频请求同一域名时,延迟下降明显。但前提是:目标服务支持 HTTP/1.1 的 Keep-Alive,且没主动断连。

  • 默认池大小是 10pool_connectionspool_maxsize 均为 10)
  • 空闲连接最长保留 120 秒(pool_block=False 时超时抛异常,不是阻塞等待)
  • 若服务端发了 Connection: close,连接立刻从池中移除,不复用

如何控制连接池大小和复用行为

requests.Session() 配置底层 urllib3.PoolManager。直接改 Sessionadapter 是唯一可靠方式。

常见错误是以为设置全局变量或改 requests 模块属性就能生效——不行,每个 Session 独立管理自己的池。

立即学习Python免费学习笔记(深入)”;

LOVO AI
LOVO AI

AI人声和文本转语音生成工具

下载
  • 增大池容量:
    s = requests.Session()<br>s.mount('https://', requests.adapters.HTTPAdapter(pool_connections=20, pool_maxsize=20))
  • 禁用复用(调试用):requests.get(url, headers={'Connection': 'close'}),但只对单次请求有效
  • 想强制复用,得确保服务端返回 Keep-Alive,且客户端没设 Connection: close

ConnectionPoolMaxSizeError 是什么情况

这是 urllib3 抛的 MaxRetryError 子类,本质是池满 + pool_block=False(默认值),导致新请求拿不到空闲连接。

典型场景:并发高、池太小、响应慢,连接长期被占着。不是网络故障,是资源调度卡住了。

  • 现象:MaxRetryError: HTTPSConnectionPool(host='x', port=443): Max retries exceeded with url: / (Caused by PoolFullError(...))
  • 别急着加池大小——先看是否请求没及时关闭(比如忘了 .close() 或没用 with)、响应体没读完(response.content 没触发读取)
  • 真正要调参时,优先调 pool_maxsizepool_connections 只影响不同 host 的池数量,一般不用动

长连接失效后怎么自动重试

连接池本身不负责重试逻辑,靠 urllib3.Retry 控制。但注意:连接复用失败(比如 socket 已断)触发的重试,和业务层 HTTP 5xx 重试是两回事。

默认只对连接级错误(如 ConnectionErrorTimeout)重试,不对 404500 重试——除非你显式配置 status_forcelist

  • 启用连接失败自动重试:
    adapter = requests.adapters.HTTPAdapter(max_retries=3)<br>s.mount('https://', adapter)
  • 重试会换新连接(可能新建 TCP),不是“继续用旧连接”
  • 如果服务端在 Keep-Alive 期间突然关连接,第一次请求大概率失败,第二次才成功——这就是重试在起作用

池里的连接状态是懒检测的,只有真正用时才发现断了。所以别指望“定期心跳”,实际就是靠失败+重试兜底。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
session失效的原因
session失效的原因

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

325

2023.10.17

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

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

772

2023.10.18

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

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

96

2025.08.19

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

85

2025.09.18

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

101

2025.09.18

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

463

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

435

2023.11.14

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

3041

2024.03.12

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

76

2026.02.13

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 4.3万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.5万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号