Python范围内的内存不足

时间:2014-08-08 15:30:26

标签: python memory stream

我有以下问题:

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这是非常合理的。有没有更好的方法来编写这段代码而不会耗尽内存?

1 个答案:

答案 0 :(得分:0)

似乎对于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会更好,因为它们比dicts更有内存效率,而且你的变量建议你可以使用一组固定的字段。

这类似于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)
]