Python在运行CV程序时无法分配超过500MB(在Mac的8GB RAM VirtualBox上运行Ubuntu)
在我更仔细地研究下面这个错误信息之前……
ERROR:
Traceback (most recent call last):
File "polarize.py", line 13, in <module>
output = img.binarize(val).invert()
File "/usr/local/lib/python2.7/dist-packages/SimpleCV/ImageClass.py", line 3045, in invert
return -self
File "/usr/local/lib/python2.7/dist-packages/SimpleCV/ImageClass.py", line 4729, in __neg__
return Image(newbitmap, colorSpace=self._colorSpace)
File "/usr/local/lib/python2.7/dist-packages/SimpleCV/ImageClass.py", line 1035, in __init__
self._bitmap = cv.CreateImage(cv.GetSize(source), source.depth, 3)
error: Failed to allocate 614794416 bytes
我之前没想到要把那里的字节数转换成兆字节。结果发现大概是500MB。
现在我已经给这个VirtualBox分配了超过8GB的内存(我的Macbook有16GB),显然这对我现在的情况没有帮助。
我需要给Python更多的“空间”。
顺便说一下,正在加载的文件是一个9MB的PNG文件,展开后大约变成80MB,而当它变成未压缩的TIFF位图时,大小会膨胀到大约800MB。不过在这种情况下,实际需要的内存(大约500MB)似乎比这个要少一些。如果Python需要的话,我想给它分配2-3GB的内存。
1 个回答
0
“我的操作系统是怎么给进程分配内存的”其实不是一个编程问题,不过没关系。
Ubuntu作为一个现代操作系统,你不需要给Python额外分配内存。它会使用操作系统能提供的最大内存。既然你给虚拟机分配了8GB的内存,操作系统有足够的内存可以分配。
我假设你在用32位的Python。在32位的Ubuntu上,你的内存限制是3GB。而在64位的Ubuntu上(即使你还是在用32位的Python),你几乎可以使用4GB的内存。不过,32位程序的硬性限制是4GB,因为32位的地址空间就只有这么多。
我猜测你可能已经达到了这个3GB或4GB的限制,因为某些东西(可能是你的脚本或库)在你不再需要它们后,仍然在占用内存。只要有三四个图像还留在内存中,就可能导致你无法再创建更多的图像。如果不了解你实际程序的更多细节,很难指出问题出在哪里。
一种简单粗暴的方法是,如果你有64位的编译库,可以考虑把Python换成64位的,并在64位的Ubuntu上运行。