Python中共享数组的Rawarray的最大大小



试图在多个进程中创建用于共享内存的数组时,我会得到一个断言错误:

    shared_array = RawArray('d', xsize)
  File "C:Python27libmultiprocessingsharedctypes.py", line 88, in RawArray
    obj = _new_value(type_)
  File "C:Python27libmultiprocessingsharedctypes.py", line 68, in _new_value
    wrapper = heap.BufferWrapper(size)
  File "C:Python27libmultiprocessingheap.py", line 242, in __init__
    assert 0 <= size < sys.maxint
AssertionError

看来它超过了一些最大数字,但是,即使我运行一个基本示例,如下:

from multiprocessing.sharedctypes import RawArray
import sys
xsize = 999999999
#create an empty array    
print('MaxInt:',sys.maxint)
print('My Size:',xsize)
shared_array = RawArray('d', xsize)

打印语句显示:

('MaxInt:', 2147483647)
('My Size:', 999999999)

为什么会发生这种情况,当拥有非常大数组时,我该如何制作一个共享的数组来进行多处理?我的计算机有128GB的RAM,因此不应该是问题。

int这里将是" C样式" INT,它倾向于4个字节,但是您要求它,因此通过执行:

from sys import maxint
from ctypes import sizeof, c_int
maxint // sizeof(c_int)

对于您(拥有32位构建(的

将是〜512m的元素。但是,如果您正在运行32位构建,那么您的地址空间将是一个更大的限制因素,而且几乎可以肯定,您将无法分配那么大的数组。

我正在使用64位构建Python 2.7和3.7,其中sys.maxintsys.maxsize均为2**63-1,并且都允许我分配一个具有十亿(10**9(元素的数组(我可以看到Python具有〜4GB RSS RSS(,尽管花了一段时间才能全部零。

相关内容

  • 没有找到相关文章

最新更新