Python 共享内存数组,没有属性 get_obj()

标签 python numpy multiprocessing ctypes

我正在使用多处理模块处理 numpy 数组,在尝试我在这里运行的一些代码时遇到了问题。具体来说,我正在从一个 numpy 数组创建一个 ctypes 数组,然后尝试将 ctypes 数组返回到一个 numpy 数组。这是代码:

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

我不需要任何类型的同步锁,所以我使用的是 RawArray。 ctypes 数据类型是根据输入数组的 dtype 从字典中提取的。效果非常好。

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

这里我得到一个堆栈跟踪说明:

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

我还尝试了来自 this post 的以下内容,但出现相同的错误。

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

我在运行 python 2.6 时卡住了,不知道这是否是问题所在,是否是共享变量名的问题(我试图尽可能降低内存使用率,并且尽量不复制 numpy 数组和内存中的 ctypes 数组),或者其他一些我刚刚学习的 python 组件。

建议?

最佳答案

因为你使用了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 共享内存数组,没有属性 get_obj(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11693714/

相关文章:

python - 使用 Python 解析文本文件中的文本 block

python - 从字符串中删除转义字符

algorithm - 用于半稀疏数组中最近邻计算的 Numpy 矢量化

python ProcessPoolExecutor 在运行时不起作用

python - 无法导入名称共享内存

Python 的 Subprocess.Popen With Shell=True。等到它完成

python - 如何将 fit_generator 与多个输入一起使用

python - 检查两个 3D numpy 数组是否包含重叠的 2D 数组

python - 在二维 numpy 数组上广播函数

python - 使用线程和进程并发写入同一文件