python - 错误处理 : Boto: [Error 104] Connection Reset by Peer

标签 python error-handling amazon-s3 boto

我有一个从 Amazon S3 下载的脚本。这些脚本在 99.9% 的时间内都有效。有时我会收到以下错误(socket.error:[Errno 104] Connection reset by peer)。一旦我重新启动代码,错误似乎就消失了。因为很难重现错误。我希望下面的代码片段能够修复错误。具体来说,我希望如果出现错误,它会尝试重新下载文件。我想知道这段代码是否有效,是否还有其他我应该添加的东西。我认为错误计数器可能很好,所以如果错误确实不断出现,它最终会继续前进。 (不确定如何添加计数器)

files = [#list of files to download]

for file in files:
    for keys in bucket.list(prefix=file):
        while True:
            try:
                keys.get_contents_to_filename()
            except socket.error:
                continue
            break

最佳答案

我遇到了完全相同的问题。如果你在 GitHub 上搜索 boto,你会发现,我们并不孤单。

还有一个已知的已接受问题:https://github.com/boto/boto/issues/2207

达到 AWS S3 的性能极限

事实是,我们已经习惯了 boto 和 AWS S3 服务,我们忘记了,这些实际上是分布式系统,在某些情况下可能会崩溃。

我正在归档(下载、tar、上传)大量文件(大约 3 年,大约 15 个提要,每个提要每天大约有 1440 个版本)并使用 Celery 来更快地完成这项工作。我不得不说,有时我更频繁地遇到这些错误,可能达到了 AWS S3 的性能极限。这些错误通常成 block 出现(在我的例子中,我以大约 60 Mbps 的速度上传了几个小时)。

训练S3性能

当我测量性能时,它被“训练”了。几个小时后,S3 存储桶的响应速度跃升,AWS 可能检测到更高的负载并启动了更多实例来为其服务。

试试最新稳定版的boto

另一件事是,boto 在很多情况下都在尝试重试,所以很多失败都隐藏在我们的调用中。有时我升级到最新的稳定版本后会好一些。

我的结论是:

  • 尝试升级到最新的稳定 boto
  • 当错误率上升时,降低压力
  • 接受这样一个事实,即 AWS S3 是具有罕见性能问题的分布式服务

在你的代码中,我肯定会建议添加一些 sleep ,(至少 5 秒,但 30 秒对我来说似乎很好),否则你只是越来越努力地插入一个系统,这可能在时刻。

关于python - 错误处理 : Boto: [Error 104] Connection Reset by Peer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23397460/

相关文章:

python - 如何根据另一个数据帧过滤多索引数据帧

python - PhantomJS 不返回页面源

python - 在 Tensorflow 2.2 中使用 tf.metrics.MeanIoU() 和 SparseCategoricalCrossEntropy 损失时出现尺寸不匹配错误

go - 处理来自多个抽象级别的错误的最佳实践

c# - 如何以编程方式为 Amazon S3 设置 Http Header?

python - 我一直在使用字典键作为成员标记。这是一个好主意吗?

java - 转义序列无效(有效的是\b\t\n\f\r\"\'\\)

php - Slim 3 激活自定义错误处理程序

amazon-web-services - 当我尝试使用签名帖子上传到 s3 时访问被拒绝,这可能是存储桶策略吗?

ios - AWS S3作为使用Web API的ios应用程序的图像存储