#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 обычно лучше подходят для потоковой декомпрессии.