botocore:如何关闭或清理会话或客户端

Ska*_*ren 8 python botocore

在使用botocorePython中的库对AWS-EC2进行一些自动化时,我注意到仍然建立了许多HTTPS连接,这些连接不再需要忙于执行其他操作的进程(因此不能选择将其删除或重新编码以退出) .我认为botocore会话和/或客户端对象正在建立与AWS端点的连接.该botocore文档显示了如何启动或创建它们,而不是如何关闭它们或清理它们.我尝试了一种.close方法,但它不存在. 如何在不中断进程的情况下优雅地关闭这些连接?

Jer*_*und 8

我有同样的问题,但从一个稍微不同的角度:当关闭工作线程时,我的日志文件会因这些警告而变得混乱 - 也是由于打开的连接:

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

ResourceWarning:未关闭 <ssl.SSLSocket fd=4,family=AddressFamily.AF_INET,type=2049,proto=6,laddr=('[内部 ip]',49266),raddr=('[外部 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)
Run Code Online (Sandbox Code Playgroud)

可以使用以下命令关闭 SQS 连接:

sqs.meta.client._endpoint.http_session.close()  # closing a boto3 resource
sqs._endpoint.http_session.close()  # closing a boto3 client
Run Code Online (Sandbox Code Playgroud)