我是 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)
>>>
您的错误在于第二个程序中,您使用了错误的 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
,以便释放它。