我有以下问题:
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这是非常合理的。有没有更好的方法来编写这段代码而不会耗尽内存?
答案 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)
]