获取MemoryError因为列表/数组太大

时间:2014-05-18 12:19:40

标签: python arrays list memory integer

问题

我必须下载object_x。为简单起见,object_x包含一系列integers加起来1000。下载不规范。我以看似随机的顺序接收群组或chunks整数,并且我需要跟踪它们,直到我完成所有1000来构成最终object_x

传入的块也可以重叠,例如:

Chunk 1: integers 0-500
Chunk 2: integers 600-1000
Chunk 3: integers 400-700

当前方法

object_x创建为list,其中包含所有包含整数的0-1000。下载chunk后,从chunk中删除构成object_x的所有整数。继续这样做,直到object_x为空(已知完成)。

object_x = range(0,1000)

# download chunk 1
chunk = range(0, 500)

for number in chunk:
    if number in object_x:
        object_x.remove(number)

# repeat for every downloaded chunk

结论

此方法非常耗费内存。如果object_xchunk太大,脚本会抛出MemoryError。

我正在寻找一种更好的方法来跟踪构建object_x的块。有任何想法吗?我使用的是Python,但语言并不重要。

1 个答案:

答案 0 :(得分:0)

这是一种流媒体非常重要的场景。在内存中做所有事情是一个坏主意,因为你可能没有足够的内存(如你的情况)。您应该将块保存到磁盘,跟踪下载的数量,当达到1000时,在磁盘上处理它们(或者逐个加载到内存中来处理它们)。

C# Security: Computing File Hashes”是我最近写的一篇文章 - 它是一个不同的主题,但它确实说明了流式传输的重要性。