Мне интересно, где лучше всего создать экземпляр boto3 s3-клиента, чтобы его можно было повторно использовать во время запроса в django.Где копировать клиент boto s3, чтобы он использовался повторно во время запроса?
У меня есть модель Django с вычисляемым свойством, которое возвращает подписанный s3 URL:
@property
def url(self):
client = boto3.client('s3')
params = {
'Bucket': settings.BUCKET,
'Key': self.frame.s3_key,
'VersionId': self.key
}
return client.generate_presigned_url('get_object', Params=params)
Объект сериализуется в JSON и возвращает список, который может содержать 100 из этих объектов.
Несмотря на то, что boto3.client('s3')
не выполняет никаких сетевых запросов при создании экземпляра, я обнаружил, что он работает медленно.
Размещение S3_CLIENT = boto3.client('s3')
в settings.py, а затем использование этого вместо создания экземпляра нового клиента на объект уменьшило время отклика на ~ 3X с 100 результатами. Тем не менее, я знаю, что неверно использовать глобальные переменные в settings.py
Мой вопрос заключается в том, где создать экземпляр этого клиента, чтобы его можно было повторно использовать, по крайней мере, на уровне запроса?