在Python SharedMemory中创建NumPy结构化数组

问题描述

当尝试将NumPy结构化数组foo复制到Python共享内存中时,出现以下错误

ValueError:无法将输入数组从形状(1000000)广播到形状(1000448)

结构化数组foo复制到SharedMemory对象中以便可以在进程之间共享的正确方法是什么?

我们如何在fooShmArr添加另外448个元素?在NumPy 1.17.4和1.19.1上都进行了测试。

代码

from multiprocessing import shared_memory
import numpy as np

if __name__ == '__main__':
    # Create NumPy structured array
    N = 1000*1000
    keyArr = np.random.randint(0,1000*1000*1000,N).astype(np.uint32)
    valArr = np.random.rand(N).astype(np.float32)
    foo = np.empty(keyArr.shape[0],dtype=[('keys',keyArr.dtype),('vals',valArr.dtype)])
    foo['keys'] = keyArr
    foo['vals'] = valArr

    # copy NumPy strucuted array into shared memory segments
    fooShm = shared_memory.SharedMemory(create=True,size=foo.nbytes)
    fooShmArr = np.frombuffer(fooShm.buf,valArr.dtype)])
    fooShmArr['keys'][:] = foo['keys'][:]
    fooShmArr['vals'][:] = foo['vals'][:]

    fooShm.close()
    fooShm.unlink()

错误

Traceback (most recent call last):
    File "foo.py",line 15,in <module>
        fooShmArr['keys'][:] = foo['keys'][:]
ValueError: Could not broadcast input array from shape (1000000) into shape (1000448)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)