python - AWS Boto3 s3 put_object错误处理/测试

标签 python amazon-web-services amazon-s3 error-handling boto3

python AWS boto3 s3 put_object的错误应如何处理/测试?例如:

import boto3

s3 = boto3.resource('s3')
bucket = s3.Bucket('foo')
bucket.put_object(Key='bar', Body='foobar')

是否会在某处记录可能出现的错误?以下内容甚至是正确的文档页面(似乎是boto3.client('s3')客户端,而不是boto3.resource('s3')),如果是,那么在哪里记录了错误?

http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.put_object

诸如不存在的存储桶之类的简单错误似乎很容易测试,但是会发生虚假错误,如果是这样,如何测试这种错误处理?上载速率有限制吗?我尝试了以下操作,但在运行大约2分钟后看到所有10000个文件都成功创建,感到很惊讶。当超出某个速率时,s3是否会阻塞而不是错误?
from concurrent.futures import ThreadPoolExecutor

import boto3

s3 = boto3.resource('s3')
bucket = s3.Bucket('foo')

def put(i):
    bucket.put_object(Key='bar/%d' % i, Body='foobar')

executor = ThreadPoolExecutor(max_workers=1024)

for i in range(10000):
    executor.submit(put, i)

如果发生某些错误,重试put_object调用1次或多次是否是一种好习惯?

最佳答案

AWS s3不会根据请求限制上传。限制仅针对大小:
例如:
1个POST请求将上传最大5GB的文件
2个PUT最多可以上传160 GB的大小

您一次尝试或预期要处理的错误只是客户端/浏览器限制,一次上传多个文件。

Boto3 Upload界面确实有一个名为“config”的参数,您可以在其中指定并发上传:
#要消耗更少的下行带宽,请减少最大并发
配置= TransferConfig(max_concurrency = 5)

关于python - AWS Boto3 s3 put_object错误处理/测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39009204/

相关文章:

amazon-web-services - 如何将 Drupal 站点迁移到 Amazon Web Services EC2?

javascript - 如何从 nodejs aws s3 getObject 回调数据中检索元数据?

php - AWS S3 PHP 进度条(服务器到云)

python - VSCode 木星 : is there a way to make python interactive window work as default console?

python __dict__

python - 无法在 dockerfile 中创建 conda env

ruby-on-rails - 存储桶策略和签名 URL 之间是否存在冲突?

android - 来自 fetchUuidsWithSdp 的奇怪 UUID 反转

r - MWS API 签名与 R 不匹配

amazon-web-services - Terraform:如何从一个资源 block 创建多个 aws 子网?