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
Другие вопросы по тегам