当前位置: 首页 > 知识库问答 >
问题:

aws boto3 s3 put_对象错误处理/测试

裴浩歌
2023-03-14

python AWS boto3 s3 put_对象应该如何处理/测试错误?例如:

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

像不存在的bucket这样的简单错误似乎很容易测试,但是否会出现虚假错误?如果是,如何测试这种错误处理?上传速率有限制吗?我尝试了以下方法,并惊讶地看到在运行大约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\u对象调用一次或多次是否是一种良好的做法?

共有1个答案

巩衡
2023-03-14

AWS s3不限制基于请求的上传。限制仅限于大小:例如:1 POST请求将上载高达5GB的文件2 PUT可上载高达160GB的文件

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

Boto3上传接口确实有一个名为“config”的参数,在该参数中,您可以指定并发上传:#要消耗较少的下游带宽,请减少最大并发配置=传输配置(最大并发=5)

 类似资料:
  • 错误码分析 (OTG-ERR-001) 栈追踪分析 (OTG-ERR-002)

  • Go 没有像 Java 和 .NET 那样的 try/catch 异常机制:不能执行抛异常操作。但是有一套 defer-panic-and-recover 机制(参见 13.2-13.3 节)。 Go 的设计者觉得 try/catch 机制的使用太泛滥了,而且从底层向更高的层级抛异常太耗费资源。他们给 Go 设计的机制也可以 “捕捉” 异常,但是更轻量,并且只应该作为(处理错误的)最后的手段。 G

  • 我有一套硒测试。例如,有时“断言声明”会失败。在某些情况下,这可能是因为有人破坏了某些东西,而用户界面点击顺序的结果是一个错误,导致网站的错误页面被显示。 如何检查是否每一次失败都发生了这种情况,而不必在任何地方实现对以下方法的调用? 目的是简单地通过电子邮件发送显示页面的html源,如果该页面被证明是一个错误页面。

  • 我们经常会看到很多程序员大部分的"编程"时间都花费在检查bug和修复bug上。无论你是在编写修改代码还是重构系统,几乎都是花费大量的时间在进行故障排除和测试,外界都觉得我们程序员是设计师,能够把一个系统从无做到有,是一项很伟大的工作,而且是相当有趣的工作,但事实上我们每天都是徘徊在排错、调试、测试之间。当然如果你有良好的习惯和技术方案来直面这些问题,那么你就有可能将排错时间减到最少,而尽可能的将时

  • 通过对错误类型实现 Display 和 From,我们能够利用上绝大部分标准库错误处理工具。然而,我们遗漏了一个功能:轻松 Box 我们错误类型的能力。 标准库会自动通过 Form 将任意实现了 Error trait 的类型转换成 trait 对象 Box<Error> 的类型(原文:The std library automatically converts any type that imp

  • 错误处理(error handling)是处理可能发生失败情况的过程。例如读取一个文件失败,然后继续使用这个失效的输入显然是有问题的。错误处理允许我们以一种显式的方式来发现并处理这类错误,避免了其余代码发生潜在的问题。 有关错误处理的更多内容,可参考官方文档的错误处理的章节。