Как быстро распаковать большой zip-файл в корзине S3 с помощью Python с меньшим использованием памяти

#python #amazon-s3 #optimization #memory #coding-style

Вопрос:

пытаюсь найти способ быстро распаковать большие zip-файлы с очень меньшим использованием памяти. я написал приведенный ниже код, но он требует большого использования памяти.

 s3_resource = boto3.resource('s3')
s3_client = boto3.client('s3')

s3obj = s3_resource.Object(
     bucket_name= bucket, key = ZipFileFullPath)
buffer = BytesIO(s3obj.get()["Body"].read())
Zip_file = zipfile.ZipFile(buffer)
for filename in zip_file.namelist():
    file_info= zip_file.getinfo(filename)
    s3_resource.meta.client.upload_fileobj(
       zip_file.open(filename),
       Bucket = bucket,
       Key = target_object_key )
 

необходимо ограничить размер буфера buffer = BytesIO(s3obj.get()[«Тело»].read()) эта строка занимает слишком много памяти.
В настоящее время он использует 1,6 Гб памяти

Комментарии:

1. zip-файлы хранят каталог файлов в конце файла, поэтому вам нужно прочитать его целиком, прежде чем распаковать. Обычно пишется в файл, а затем распаковывается оттуда из-за проблем с памятью, которые вы видите. файлы tar с gzipped обычно лучше подходят для потоковой декомпрессии.