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/