Python读取大JSON会占用所有内存

时间:2019-02-05 18:33:02

标签: json python-3.x ubuntu amazon-s3

我在S3上有一个gzip文件,它包含JSON格式的数据。压缩后会占用200MB的存储空间,解压缩后会占用800MB的存储空间。

在较小的文件上运行程序是可以的。在大文件上,即使在将超时增加到600s之后,它仍会保持内存最大化或超时。观察内存使用情况,它会在失败之前攀升至16GB。

我尝试将文件解压缩。我还尝试使用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

0 个答案:

没有答案