Python 3和Windows 64位系统下的内存错误。

7
我知道之前有关于内存错误的问题,例如这里这里这里这里这里。建议的解决方案通常是切换到Python 3和/或Window 64位,或者在出现故障的代码情况下修复代码。然而,我已经使用的是Python 3和Win 64。我还可以从Windows任务管理器中看到,当Python抛出内存错误时,我仍然有几GB的64GB RAM可用。

我有大约15个日期索引的Pandas数据帧,每个数据帧有14000行,平均有5000列的浮点数据,以及约40-50%的NaN值,这些数据从硬盘中读取。我不能简单地删除NaN,因为不同的列在不同的日期具有NaN。当我尝试使用pd.concat()将它们连接起来时,会发生内存错误。因此,这不是某些有误的代码或while循环的问题。如果我在连接中留下一些数据帧,则不会在连接中发生内存错误,但是当我尝试对连接的数据进行Scikit学习决策树分析时,它就会发生。

我的问题是如何使Python使用所有可用的内存而不抛出内存错误?

编辑:添加了截图 IPython解释器截图(我甚至没有安装Python 2): enter image description here

系统信息截图: enter image description here


当你谈论PC中的RAM时,那是物理内存。但Python会用完虚拟内存。 - Thomas Weller
@ThomasWeller,我已经添加了截图。坦白讲,我不在乎它运行时用完了什么类型的内存,我只需要防止这种情况发生 :-) - Saeed
4
如果您不关心的话,您将会测量错误的值。在屏幕截图中,它显示可用虚拟内存为25 GB。如果您将15个表格* 14000行* 5000列的4字节浮点数加载到内存中,那至少是4.2GB,不考虑任何开销。现在,如果您将第一个表格与第二个表格组合,它将需要2 * 280 = 560 MB。然后将其与下一个表格组合:840 MB,然后是1.1 GB等...直到最后一个表格为4.2 GB。将其总结起来就是8 GB加上原始的4.2 GB,所以是12 GB。Pandas可以很容易地具有100%的开销,因此为24 GB(我知道其他库具有700%的开销)。 - Thomas Weller
@ThomasWeller,谢谢。那很有启发性。如果我从Windows性能管理中增加虚拟内存大小,它会解决问题吗? - Saeed
只是建议您可以尝试一些方法。其中一个可尝试的方法是使用所需内存预先分配 pandas DataFrame,然后将数据插入正确的位置,而不是使用concat。是否可能pd.concat暂时创建/复制/复制内存?在Scikit学习决策树函数之前,还可以调用垃圾收集。 - justengel
3个回答

3

以下是一些相关信息的链接,希望能对您有所帮助。

如何为程序提供更多RAM

增加页面文件。页面文件是硬盘上用于处理器作为RAM使用的一部分,也称为虚拟内存。尽管它不像RAM那样快,因为它物理上位于硬盘驱动器上,但增加它有时可以提高程序性能。要访问它,请打开控制面板。单击“系统”,然后单击“高级系统设置”,接着在“性能”选项卡中单击“设置”。

如何设置Python程序的内存使用量

如果您想限制Python VM内存的使用,请尝试以下方法:1、在Linux上使用ulimit命令来限制Python的内存使用 2、您可以使用资源模块来限制程序的内存使用;如果您想通过给应用程序提供更多内存来加速程序,则可以尝试以下方法:1\线程,多进程2\ pypy 3\只在Python 2.5上使用pysco。

分配内存应用程序

1.右键单击“我的电脑”2.属性>高级>性能>设置>高级3.在虚拟内存下,检查页面文件大小(如果没有记错的话,经验法则是可用总虚拟内存的1/2)。如果您使用更多,则页面文件会在应用程序和操作系统之间发生冲突。希望这有所帮助。

为进程服务器分配内存

由于某些程序需要比其他程序更多的内存才能正常工作,因此您可以使用任务管理器来为特定进程分配额外的内存以提高性能。

其他

https://dev59.com/s3I-5IYBdhLWcg3wn526

https://dev59.com/WnE95IYBdhLWcg3wb9hb


1
我的电脑配置是8GB内存和Windows 10 x64操作系统。此外,Python 3也已安装在其中。在Python脚本读取CSV文件时,我遇到了这种异常。幸运的是,一旦增加了页面文件的初始容量和最大容量,问题就得到了解决。
要了解如何增加页面文件值的说明,请查看此SO答案:这里

0
我建议你增加页面文件大小。 我曾经遇到过同样的问题,而增加页面文件大小是解决方法。
你可以通过打开控制面板实现这种调整。点击“系统”,然后点击“高级系统设置”,再在“性能”选项卡中的“设置”里进行调整。 默认情况下,Windows只提供了0.5GB的页面文件大小。 我将我的页面文件大小增加到16GB,这样我的代码就可以正常工作了。
希望这可以帮到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接