You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

boto3 S3 Client文档记载的close()方法不存在问题咨询

问题背景

官方公开文档标注S3客户端存在close()方法,公开资料说明该方法可解决常见的未关闭SSL socket告警问题,但在boto3 1.24.19版本下调用该方法会直接抛出属性不存在的错误,需确认是否为文档疏漏。

复现过程

复现环境信息:

  • boto3版本:1.24.19
  • Python版本:3.9.10
  • 运行系统:macOS(darwin内核,Clang 13.0.0编译环境)

复现操作及报错输出如下:

$ pip freeze | grep boto3
boto3==1.24.19

$ python
Python 3.9.10 (main, Jan 15 2022, 11:48:00)
[Clang 13.0.0 (clang-1300.0.29.3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import boto3
>>> c = boto3.client('s3')
>>> c.close()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/sbrown/.virtualenvs/moreroku/lib/python3.9/site-packages/botocore/client.py", line 838, in __getattr__
    raise AttributeError(
AttributeError: 'S3' object has no attribute 'close'
结论与解决方案

这个情况不属于文档疏漏,本质是文档默认展示最新版API说明,但使用的boto3版本过低,未合入该方法实现导致的:

  • S3.Client.close() 是在boto3 1.26.0版本才正式实装到所有服务客户端的公共方法,1.24.x属于更早的维护分支,并没有包含该方法的实现,因此调用时会抛出属性不存在的错误。

可根据实际场景选择对应方案解决:

  • 优先方案:将boto3升级到1.26.0及以上稳定版本,升级后即可正常调用close()方法释放底层连接,彻底解决SSL socket未关闭的告警问题。
  • 兼容方案:如果因依赖限制必须使用1.24.x旧版本,可通过调用客户端内部连接管理器的关闭方法手动释放资源,代码为c._endpoint.http_session._manager.close()。注意该接口属于内部私有API,没有跨版本兼容性承诺,仅作临时兼容使用。

内容的提问来源于stack exchange,提问作者Scott

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 20:15:37