python多处理共享内存数组不允许二维数组

时间:2014-04-30 14:47:24

标签: python memory-management process multiprocessing shared-memory

我想将2-d数组存储为共享内存数组,因此多处理模块创建的每个进程都可以访问2-d数组。但似乎只允许矢量。如果我将以下示例中的形状从(6,1)更改为(2,3),则该示例不会起作用,并且它表示" TypeError:只有length-1数组可以转换为Python标量& #34;

from multiprocessing import Process, Value, Array
import numpy as np

def f(n,a):
    a[:] = np.ones(shape=(6,1), dtype=float)[:]

if __name__ == '__main__':
    tmp =  np.zeros(shape=(6,1), dtype=float)
    print tmp

    arr = Array('f', tmp)

    p1 = Process(target=f, args=(1,arr))
    p1.start()
    p1.join()

    print 'done'
    print arr[:]

1 个答案:

答案 0 :(得分:3)

这是因为mutiprocessing.Array是python' array类型的包装,而不是numpy.ndarray和python' array类型不包含支持多维度。具体来说,请查看initializer的文档:

  

一个新数组,其项目受typecode限制,并从可选的初始值设定值初始化,该值必须是列表,字符串或可迭代的相应类型的元素

你有一个可迭代的(一个多维数组),但它会产生视图/数组,而不是相应类型的元素。