Soh*_*eil 0 python amazon-s3 amazon-web-services boto3
我正在使用该boto3库将对象放入 Amazon S3 中。我想在我的服务器上创建一个 python 服务,该服务连接到 AWS 中的存储桶,每当我向它发送文件路径时,它都会将其放入存储桶中:
s3_resource = boto3.resource(
's3',
endpoint_url='...',
aws_access_key_id='...',
aws_secret_access_key='...'
)
bucket = s3_resource.Bucket('name')
Run Code Online (Sandbox Code Playgroud)
为了上传,我将请求发送到此方法:
def upload(path):
bucket.put_object(...)
Run Code Online (Sandbox Code Playgroud)
与存储桶的连接应该是持久的,这样每当我调用upload方法时,它都会快速将对象放入存储桶中,而不需要每次都连接到存储桶。
如何在我的 上启用长期连接s3_resource?
编辑
SDK 试图成为底层 API 调用的抽象。每当您想要将对象放入 S3 存储桶时,都会导致 API 调用。API 调用通过网络发送到 AWS,这需要建立与 AWS 服务器的连接。此连接可以保持打开状态更长时间,因此不需要每次进行 API 调用时都重新建立连接。这有助于减少网络开销,因为建立连接的成本相对较高。
从您的角度来看,这些应该是实现细节,您不必担心,因为 SDK (boto3) 会为您处理这些问题。有一些选项可以调整它处理事情的方式,但这些被认为是高级选项,你应该知道你在做什么;-)
boto3 中资源的生命周期或多或少独立于底层网络连接。当没有可以重新利用的预先存在的连接时,您将看到这种影响的方式是通过更高的延迟。
您正在寻找的是 boto3 中的保持活动选项。
可以在两个级别上启用这些功能:
传输控制协议
tcp_keepalive设置为。falseHTTP协议
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1532 次 |
| 最近记录: |