【发布时间】:2021-09-24 10:03:21
【问题描述】:
我正在尝试在 python 的多处理中使用 shared_memory 和池。
在Documentation,关于shared memory,参数buf(内存视图)我不清楚(可能是因为我不理解内存视图的概念——它是一个指针吗?)。
我想在不同的进程中使用这个共享内存。以下,我的示例基于文档:
a = np.array([1, 1, 2, 3, 5, 8])
shm = shared_memory.SharedMemory(create=True, size=a.nbytes)
# Do I need to create the existing_shm or I can keep using shm?
existing_shm = shared_memory.SharedMemory(name=shm.name)
现在是我的第一个问题。我定义了将使用共享内存中的数组的函数:
def test_function(Input):
c = np.ndarray(a.shape, dtype=np.int64, buffer=existing_shm.buf)
c[1]=100
print(c)
这是不正确的,但我不知道应该如何。
然后是主要的。是否有主要功能来完成这项工作?
if __name__=='__main__':
with Pool(os.cpu_count()) as p:
p.map(test_function, range(12))
它不起作用。
我是否必须在每个流程中定义c?或者我可以在主要定义它并在所有进程中使用它?我假设c 是一个python 对象,因此由于gil-lock 而不能被进程共享?
非常感谢!
【问题讨论】:
标签: python-3.x multiprocessing shared-memory