蟒共享存储器数组,没有属性get_obj()(Python Shared Memory Array,

2019-09-20 08:42发布

我正在使用多模操作numpy的阵列和正在运行到一个问题,尝试一些我已经越过这里运行代码。 具体来说,我创建从numpy的数组一个ctypes数组,然后试图将ctypes的阵列返回到numpy的阵列。 下面是代码:

    shared_arr = multiprocessing.RawArray(_numpy_to_ctypes[array.dtype.type],array.size)

我不需要任何同步锁的,所以我用RawArray。 所述ctypes的数据类型是从基于输入阵列的D型细胞的字典拉动。 这是工作奇妙。

    shared_arr = numpy.ctypeslib.as_array(shared_arr.get_obj())

在这里,我得到一个堆栈跟踪,指出:

    AttributeError: 'c_double_Array_16154769' object has no attribute 'get_obj'

我也曾尝试从以下这篇文章 ,但得到相同的错误。

    def tonumpyarray(shared_arr):
        return numpy.frombuffer(shared_arr.get_obj())  

我坚持运行的Python 2.6,不知道如果是这样的问题,如果是与共享变量名(我想保持内存使用尽可能低的问题,我尽量不重复numpy的阵列和ctypes的在存储阵列),或别的东西,因为我刚开始学习关于Python的这一部分。

建议?

Answer 1:

由于您使用RawArray,它只是从共享内存中分配一个ctypes阵列,没有包装的对象,所以你不需要get_obj()方法来获得被包装的对象:

>>> shared_arr = multiprocessing.RawArray("d",10)
>>> t = np.frombuffer(shared_arr, dtype=float)
>>> t[0] = 2
>>> shared_arr[0]
2.0


文章来源: Python Shared Memory Array, no attribute get_obj()