aioS3: Асинхронная загрузка файлов из AWS S3 по частям

aiobotocore может читать большие файлы по частям.

Чтобы прочитать файл полностью, вам нужно создать цикл вроде этого:

resp = yield from s3.get_object(Bucket='mybucket', Key='k')
stream = resp['Body']
try:
    while True:
      chunk = yield from stream.read(1024)
      ...
      if len(chunk) > 0:
          break
finally:
  stream.close()

Но если вам нужен объект, похожий на файл, для чего-то вроде pickle.load() или json.load(), вы не можете читать по частям - он будет читать весь файл.

В некоторых случаях это может быть неэффективно - например, pickle читает объекты по кускам, вам не нужно загружать весь файл в память для этого.

С aioS3 stream() у вас есть интерфейс, похожий на файл, с настраиваемым размером куска.

import json
from aios3.file import stream

json.load(
    stream(
        bucket = "mybucket", 
        key = "my/key/1.json",
    )
)