范围内内存不足



我有以下问题:

chunks = []
#He we have an out of memory
for i in range(chunks_count):
    chunk_info = {'offset': struct.unpack('<I', stream_file.read(int_length))[0],
                  'length': struct.unpack('<I', stream_file.read(int_length))[0]}
    chunks.append(chunk_info)

上面的代码内存不足,这是相当合理的chunk_size是2315780096。有没有更好的方法来编写这段代码而不耗尽内存?

似乎对于Python 2

chunks = [
    {
        'offset': struct.unpack('<I', stream_file.read(int_length))[0],
        'length': struct.unpack('<I', stream_file.read(int_length))[0]
    }
    for _ in xrange(chunks_count)
]

对于Python 3,这可能是一个很好的解决方案。

chunks = [
    {
        'offset': struct.unpack('<I', stream_file.read(int_length))[0],
        'length': struct.unpack('<I', stream_file.read(int_length))[0]
    }
    for _ in range(chunks_count)
]

但是似乎使用namedtuple会更好,因为它们比字典更节省内存,并且您的变量建议您可以使用一组固定的字段。

类似于Python 2

import collections
ChunkInfo = collections.namedtuple('ChunkInfo', ['offset', 'length'])
chunks = [
    ChunkInfo(
        struct.unpack('<I', stream_file.read(int_length))[0],
        struct.unpack('<I', stream_file.read(int_length))[0])
    )
    for _ in xrange(chunks_count)
]

Python 3

import collections
ChunkInfo = collections.namedtuple('ChunkInfo', ['offset', 'length'])
chunks = [
    ChunkInfo(
        struct.unpack('<I', stream_file.read(int_length))[0],
        struct.unpack('<I', stream_file.read(int_length))[0])
    )
    for _ in range(chunks_count)
]

最新更新