У меня есть файл gzip на S3, он содержит данные в формате JSON.В сжатом виде он занимает 200 МБ памяти, в разархивированном виде - 800 МБ.
Запуск программы с меньшим файлом - это нормально.Для большого файла он продолжает увеличивать объем памяти или время ожидания даже после увеличения времени ожидания до 600 с.Наблюдая за использованием памяти, она достигает 16 ГБ, а затем перестает работать.
Я попытался распаковать файл кусками.Я также попытался использовать ijson, потому что распаковка файла в строку и использование json.load () не удастся.
Почему моя программа использует так много памяти?Мой подход или понимание того, что здесь происходит, совершенно неверно?
obj = s3.get_object(
Bucket = BUCKET_NAME,
Key= KEY)
def stream_gzip_decompress(stream):
dec = zlib.decompressobj(32 + zlib.MAX_WBITS)
for chunk in body:
rv = dec.decompress(chunk)
if rv:
yield rv
b = bytearray()
for data in stream_gzip_decompress(body):
b.extend(map(ord, data.decode('utf-8')))
generator = ijson.items(io.BytesIO(b), "")
for i in generator:
myjson = i