У меня есть работник из сельдерея, работающий на Elastic Beanstalk, который опрашивает очередь SQS, получает сообщения (содержащие имена файлов S3), загружает эти файлы из S3 и обрабатывает их. Мой рабочий должен запускаться каждые 15 секунд, но по какой-то причине использование памяти продолжает расти со временем.
Это код, который я использую для доступа к SQS
def get_messages_from_sqs(queue_url, queue_region="us-west-2", number_of_messages=1):
client = boto3.client('sqs', region_name=queue_region)
sqs_response = client.receive_message(QueueUrl=queue_url, MaxNumberOfMessages=number_of_messages)
messages = sqs_response.get("Messages", [])
cleaned_messages = []
for message in messages:
body = json.loads(message["Body"])
data = body["Records"][0]
data["receipt_handle"] = message["ReceiptHandle"]
cleaned_messages.append(data)
return cleaned_messages
def download_file_from_s3(bucket_name, filename):
s3_client = boto3.client('s3')
s3_client.download_file(bucket_name, filename, '/tmp/{}'.format(filename))
Нужно ли нам закрывать клиентское соединение в boto3 после того, как мы закончили с процессом? Если так, как мы можем это сделать?