gpt4 book ai didi

python - botocore:如何关闭或清理 session 或客户端

转载 作者:太空狗 更新时间:2023-10-29 21:07:02 27 4
gpt4 key购买 nike

在使用 Python 中的 botocore 库围绕 AWS-EC2 做一些自动化时,我注意到许多 HTTPS 连接仍然建立,忙于做其他事情的进程不再需要这些连接(所以杀死他们或重新编码他们退出不是一个选项)。我认为 botocore session 和/或客户端对象正在离开与已建立的 AWS 端点的连接。 botocore 文档展示了如何启动或创建它们,但没有如何关闭它们或清理它们。我尝试了 .close 方法,但它不存在。 如何在不终止进程的情况下优雅地关闭这些连接?

最佳答案

我遇到了同样的问题,但角度略有不同:关闭工作线程时,我的日志文件会因这些警告而变得困惑 - 也是由于打开的连接:

Exception ignored in: <ssl.SSLSocket fd=4, family=AddressFamily.AF_INET, type=2049, proto=6, laddr=('[internal ip]', 49266), raddr=('[external ip]', 443)>

ResourceWarning: unclosed <ssl.SSLSocket fd=4, family=AddressFamily.AF_INET, type=2049, proto=6, laddr=('[internal ip]', 49266), raddr=('[external ip]', 443)>

经过一段时间的摸索,我已经弄清楚如何在关闭线程之前正确关闭连接。

我将 SQS 与 boto3 结合使用,因此您可能需要稍微修改调用以使其与 botocore 一起使用。

我生成上述警告的示例是:

import boto3
import boto3.session
import warnings

warnings.simplefilter('error', ResourceWarning) # Display warnings
session = boto3.session.Session()
sqs = session.resource('sqs', region_name=AWSregion)
sqs_q = sqs.Queue(url=SQSQueueUrl)
sqs_msg = sqs_q.receive_messages(MaxNumberOfMessages=1)

可以使用以下方式关闭 SQS 连接:

sqs.meta.client._endpoint.http_session.close()  # closing a boto3 resource
sqs._endpoint.http_session.close() # closing a boto3 client

关于python - botocore:如何关闭或清理 session 或客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33461877/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com