使用aioboto3 / boto3时大型s3文件的数据一致性

问题描述 投票:0回答:1
async with session.client("s3") as s3:
  object = await s3.get_object(Key=key, Bucket=bucket)
  body = object.get("Body")
  for i in range(1000):
    process_data(await body.read(i + 100))

我需要使用

aioboto3
下载一些大的 s3 文件。我是否正确地假设第一个 get_object 调用创建了一个连接,而对 body 的
read
调用实际上从 s3 读取数据?

如果我正在下载一个大的 s3 文件,并且上传了新版本,

read
调用是否仍会从同一版本的对象中读取?

amazon-s3 boto3 botocore aiobotocore
1个回答
0
投票

是的,它创建到 S3 的连接并返回对该对象的引用。当您使用await body.read()时,实际的数据传输发生。

关于你的第二个问题:一旦你调用 get_object 并收到响应(其中包括对象的主体),该响应代表发出请求时存在的文件版本。这意味着对 Body 的后续读取调用将继续从您进行初始 get_object 调用时存在的版本中检索数据。

即使在读取过程中将对象的新版本上传到 S3,您的读取操作仍将从对象的原始版本继续。在 S3 中,您获得的版本在您请求时“锁定”。

© www.soinside.com 2019 - 2024. All rights reserved.