在使用Python中的botocore
库围绕AWS-EC2进行一些自动化时,我注意到仍然建立了许多HTTPS连接,这些连接不再需要忙着做其他事情的进程(因此要杀掉它们或重新编码)他们退出不是一个选择)。我认为botocore
会话和/或客户端对象正在建立与AWS端点的连接。 botocore
文档显示了如何启动或创建它们,但不如何关闭它们或清理它们。我尝试了.close
方法,但它不存在。 如何在不中断流程的情况下优雅地关闭这些连接?
答案 0 :(得分:4)
我有同样的问题,但是从一个稍微不同的角度来看:当关闭工作线程时,我的日志文件会因为这些警告而混乱 - 也是由于打开连接:
在:< 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