为什么Python'Memory Error`带有list`append()`lot of RAM

2024-05-13 10:53:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用一组文本文件建立一个大数据字典。当我阅读并处理这些行时,我append(dataline)到一个列表。

在某个时刻,append()会生成一个Memory Error异常。但是,看着程序在Windows任务管理器中运行,在崩溃的时候,我看到4.3gb可用,1.1gb可用。

因此,我不明白这个例外的原因。

Python版本是2.6.6。我想,唯一的原因是它不能使用更多的可用内存。如果是这样,是否有可能增加拨款?


Tags: 数据程序管理器列表字典windows原因error
3条回答

如果您愿意重新构造代码,而不是向其投入更多的内存,那么您可能可以通过以下操作:

data = (processraw(raw) for raw in lines)

其中lines是行列表或file.xreadlines()或类似的。

如果您使用的是32位的Python构建,那么您可能需要尝试64位版本。

一个进程最多可以使用32位地址寻址4GB的RAM,但通常情况下(取决于操作系统),一个进程得到的内存要少得多。听起来你的Python进程可能达到了这个极限。64位寻址消除了这一限制。

编辑由于您询问有关Windows的信息,因此以下页面具有相关性:Memory Limits for Windows Releases。如您所见,每个32位进程的限制是2、3或4GB,具体取决于操作系统版本和配置。

我在64位windows环境中使用32位版本的python也遇到了类似的问题。我尝试了64位windows版本的python,很快就遇到了为64位windows编译的Scipy库的问题。

我实现的完全免费的解决方案是

1)安装VirtualBox
2) 在虚拟机上安装CentOS 5.6
3) 获取热情的Python发行版(免费64位Linux版本)。

现在,所有依赖于Numpy、Scipy和Matplotlib的python代码都可以使用与Ram和可用Linux交换一样多的内存。

相关问题 更多 >