python2.7-Python27内存错误问题



我试图使用python处理一些数据,但经常遇到"MemoryError"。对于我的数据处理,我需要运行大约400次循环。问题是,每次我进入这个循环20-30次,我就会得到"MemoryError"。在观看任务管理器时,当python.exe*32为~1 GB时,就会出现这种情况。我会使用64位python,但我需要的一些库只有32位。此外,在我用每个循环调用的主函数的末尾,我将del函数用于我使用的几乎每个变量。当"MemoryError"发生时,我必须完全退出解释器,否则,如果我再次尝试重新使用它,它会自动失败,并显示"MemoryError"。

我使用的是Python(x,y)2.7,需要以下内容:numpyscipy.iomatplotlib脓喷剂pyfft

你说它在这样的线路上崩溃了:

s = zeros((A,B,C),complex128)

其中A=2400,B=256,C=25。这将需要235 MB的内存。不仅仅是任何235MB:它必须是连续的,因为NumPy希望将其用作单个数组。

您还提到您在32位进程中运行此程序,并且当进程内存使用量达到1GB左右时,它会崩溃。

这很不幸,但并不完全令人惊讶。考虑一下,32位进程中的总可用虚拟内存约为3 GB,并且不可避免地会出现一些"漏洞",这意味着您永远无法分配一个4 GB大小的阵列。但是你能在一块中分配多少呢?好吧,这取决于你到目前为止分配的内存碎片,因为你的程序仍然需要的虚拟地址可能会"分散"在它的4GB地址空间周围,最终你可能无法将四分之一GB的块全部分配到一起。

在这里,您应该做的是分配一次矩阵并重新使用它。当您的程序刚刚启动时,您极有可能成功分配235 MB阵列,您可以稍后在重新使用它之前清除它,而无需再次分配。

或者,您可以(a)移动到64位,或者(b)在运行垃圾收集语言一段时间后,可能会花费相当多的时间来跟踪为什么不能分配一个大的连续块。

相关内容

  • 没有找到相关文章

最新更新