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",
)
)