我使用boto3库在S3中放置对象。我想在我的服务器上创建一个python服务,它连接到AWS中的桶,每当我向它发送文件路径时,它都会将它放入桶中:
s3_resource = boto3.resource(
's3',
endpoint_url='...',
aws_access_key_id='...',
aws_secret_access_key='...'
)
bucket = s3_resource.Bucket('name')为了上传,我将请求发送到此方法:
def upload(path):
bucket.put_object(...)到桶的连接应该是持久的,这样每当我调用upload方法时,它都会快速地将对象放入桶中,而不需要每次都连接到桶中。
如何在我的s3_resource上启用长寿命连接?
发布于 2021-06-07 09:08:50
编辑
SDK试图成为底层API调用的抽象。每当您想要将一个对象放入一个S3桶中时,就会产生一个API调用。API调用通过网络发送到AWS,这需要建立到AWS服务器的连接。此连接可以保持较长时间打开,因此不需要每次进行API调用时都重新建立它。这有助于减少网络开销,因为建立连接的成本相对较高。
从您的角度来看,这些应该是实现细节,您不必担心,因为SDK (boto3)会为您处理这个问题。有一些选项可以调整它处理事物的方式,但这些选项被认为是高级选项,您应该知道自己在做什么;-)
boto3中资源的生命周期或多或少与底层网络连接无关。您将看到这种影响的方式,是通过更高的延迟,当有,没有预先存在的连接,可以重新使用。
您正在寻找的是在boto3中保持活力的选项。
可以在两个级别上启用这些功能:
TCP
tcp_keepalive选项,默认设置为false。HTTP
def set_connection_header(request, operation_name, **kwargs):
request.headers['Connection'] = 'keep-alive'
ddb = boto3.client('dynamodb')
ddb.meta.events.register('request-created.dynamodb', set_connection_header)https://stackoverflow.com/questions/67868254
复制相似问题