botocore: как закрыть или очистить сеанс или клиент
Во время автоматизации AWS-EC2 с botocore
В библиотеке на Python я заметил, что многие HTTPS-соединения остаются установленными, которые больше не нужны процессам, занятым другими делами (поэтому убивать их или перекодировать для выхода нельзя). я думаю botocore
Объект сеанса и / или клиента оставляет соединения с конечными точками AWS установленными. botocore
документация показывает, как их запускать или создавать, а не как их закрывать или очищать. Я попробовал .close
метод, но он не существует. Как я могу заставить эти соединения изящно закрыться, не убивая процессы?
1 ответ
У меня была та же проблема, но с несколько иной точки зрения: при закрытии рабочих потоков мои файлы журналов загромождались этими предупреждениями - также из-за открытых соединений:
Исключение игнорируется в:
ResourceWarning: не закрыто
Через некоторое время в кроличьей норе я выяснил, как правильно закрыть соединения, прежде чем закрывать нити.
Я использую 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