共享内存numpy数组代码不起作用

问题描述 投票:0回答:1

我是 Python 新手,正在学习多重处理,并且正在遵循 Python multiprocessing.shared_memory 文档 中的代码。但我无法获得变量

c
的正确值。

program1.py

>>> import numpy as np
>>> from multiprocessing import shared_memory
>>> a = np.array([1, 1, 2, 3, 5, 8])
>>> shm = shared_memory.SharedMemory(create=True, size=a.nbytes)
>>> b = np.ndarray(a.shape, dtype=a.dtype, buffer=shm.buf)
>>> b[:] = a[:]
>>> b
array([1, 1, 2, 3, 5, 8])
>>> shm.name
'wnsm_d69eb579'
>>>

program2.py

>>> import numpy as np
>>> from multiprocessing import shared_memory
>>> existing_shm = shared_memory.SharedMemory(name='wnsm_d69eb579')
>>> c = np.ndarray((6,), dtype=np.int64, buffer=existing_shm.buf)
>>> c
array([ 4294967297, 12884901890, 34359738373,           0,           0,
                 0], dtype=int64)
>>>
python numpy multiprocessing shared-memory
1个回答
0
投票

您的错误在于第二个程序中,您使用了错误的 dtype 参数。你有:

c = np.ndarray((6,), dtype=np.int64, buffer=existing_shm.buf)

但这应该是:

c = np.ndarray((6,), dtype=np.int32, buffer=existing_shm.buf)

在访问共享内存时,不要忘记正确使用共享内存方法

close
unlink
,以便释放它。

© www.soinside.com 2019 - 2024. All rights reserved.