0

在我更仔细地研究以下错误消息之前...

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 的​​内存(16GB Macbook),显然这对我来说不再有帮助了。

我需要更多 Python 的“空间”。

顺便说一句,正在加载的文件是一个 9MB 的 PNG 文件,当它展开为 png 时会膨胀到大约 80MB,当它变成未压缩的 TIFF 位图时会完全膨胀到大约 800mb。但是,在这种情况下,内存需求的全部范围(~500MB)似乎比这要少一些。如果需要,我想为 Python 分配 2-3GB。

4

1 回答 1

0

“我的操作系统如何为进程分配内存”并不是一个真正的编程问题,而是什么鬼。

Ubuntu 作为一个现代操作系统,你不必给 Python 更多的内存。它将使用操作系统提供的最大空间。由于您已为 VM 分配了 8 GB,因此操作系统有大量 RAM 可供分配。

我假设你有 32 位 Python。在 32 位 Ubuntu 上,您被限制为 3 GB。在 64 位 Ubuntu(仍在运行 32 位 Python)上,您有将近 4 GB。但是,32 位进程的硬限制是 4 GB。没有比 32 位更多的地址了。

我的期望是你确实达到了这个 3 GB 或 4 GB 的限制,因为某些东西(你的脚本或你的库)在你不再需要它们之后会保留对图像的引用。只需要在内存中保留三到四张图像就可以让您无法再创建任何图像。如果不了解有关您的实际程序的更多详细信息,则很难提出问题可能出在哪里。

如果您使用的任何已编译库的 64 位版本,则一种蛮力方法是转换为在 64 位 Ubuntu 上运行的 64 位 Python。

于 2014-03-07T21:58:27.467 回答