【发布时间】:2016-12-24 20:29:08
【问题描述】:
对于 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 次或多次是否是一种好习惯?
【问题讨论】:
-
为什么不使用
try: except?在这种情况下? -
类似以下的答案表明正在进行一些自动重试:*.com/questions/29378763/…。此外,一些 boto3 错误不会引发异常,例如lambda 调用响应状态码包含错误信息boto3.readthedocs.io/en/latest/reference/services/…
-
取决于上传频率。在使用
PUT请求重试之前,您可能需要使用GET验证上传。由于 AWS 对PUT($0.01/1k 请求)的收费是GET($0.01/10k 请求)的 10 倍
标签: python amazon-web-services amazon-s3 error-handling boto3