Python 获取MemoryError,因为列表/数组太大 问题
我必须下载Python 获取MemoryError,因为列表/数组太大 问题,python,arrays,list,memory,integer,Python,Arrays,List,Memory,Integer,我必须下载object\ux。为简单起见,object_x由一系列的整数组成,加起来等于1000。下载是不定期的。我以看似随机的顺序接收整数的组或块,我需要跟踪它们,直到我有了所有的1000来组成最后的对象 传入的块也可以重叠,例如: Chunk 1: integers 0-500 Chunk 2: integers 600-1000 Chunk 3: integers 400-700 现行方法 创建object\u x作为一个列表,其中包含其所有组成整数0-1000。下载区块时,从对象x中删
object\ux
。为简单起见,object_x
由一系列的整数组成,加起来等于1000
。下载是不定期的。我以看似随机的顺序接收整数的组或块,我需要跟踪它们,直到我有了所有的1000
来组成最后的对象
传入的块也可以重叠,例如:
Chunk 1: integers 0-500
Chunk 2: integers 600-1000
Chunk 3: integers 400-700
现行方法
创建object\u x
作为一个列表
,其中包含其所有组成整数0-1000
。下载区块
时,从对象x
中删除构成区块
的所有整数。继续执行此操作,直到object_x
为空(此时已知已完成)
结论
这种方法占用大量内存。如果object\u x
或chunk
太大,脚本将抛出MemoryError
我正在寻找一种更好的方法来跟踪块以构建对象\ux
。有什么想法吗?我正在使用Python,但我想语言并不重要。这是一种流媒体非常重要的场景。在内存中做任何事情都是一个坏主意,因为您可能没有足够的内存(如您的情况)。您可能应该将这些数据块保存到磁盘上,跟踪您下载的数据块数量,当您达到1000个时,在磁盘上处理它们(或者将它们逐个加载到内存中进行处理)
“这是我最近写的一篇文章——这是一个不同的主题,但它确实说明了流媒体的重要性。那么你如何跟踪它们呢?不幸的是,我不能按照你的建议去做,因为我无法控制这段代码的部署。我所能做的就是优化我的代码,使其不会出现任何错误,因此,我会沿着这些思路寻找解决方案。
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