【发布时间】:2020-10-20 17:42:08
【问题描述】:
给定 S3 中的大型 gzip 对象,python3/boto3 中的内存高效(例如流式传输)方法来解压缩数据并将结果存储回另一个 S3 对象是什么? p>
之前有人问过similar question。但是,所有答案都使用了一种方法,其中首先将 gzip 文件的内容读入内存(例如ByteIO)。这些解决方案对于太大而无法放入主内存的对象是不可行的。
对于大型 S3 对象,需要读取内容,“即时”解压缩,然后写入不同的 S3 对象,这是一种分块方式。
提前感谢您的考虑和回复。
【问题讨论】:
-
this question 的批准答案在哪些方面不能解决您的问题?如果您正在运行 Python 3,for 循环将充当生成器,因此解压缩将被流式传输。
-
@Tim S3接口需要绑定boto3。
-
你愿意使用多少内存?对于流传输,您总是需要使用一些内存,因为多部分上传 API 需要在请求 headers 中为每个部分发送内容校验和 - 您至少需要一个内存缓冲区在 @ 的范围内987654325@ *
n_concurrent_parts。您是否有任何理由需要流式传输,而不是简单地使用临时文件? -
Boto3 使用 meta.client.download_file 为您处理这个问题。见答案。
-
@wim 我不是要求 0 内存使用量,但我要求消耗的内存不会随着文件的大小而增长。我想一个临时文件可以工作,虽然它非常低效。
标签: python amazon-web-services amazon-s3 gzip boto3