如何使用现有的NumPy数组初始化共享内存数组

时间:2018-05-08 13:54:35

标签: python numpy python-multiprocessing

我想使用multiprocessing模块从子进程访问现有的NumPy数组,而不将数组复制到共享内存对象。显然,multiprocessing.Array创建了这样一个共享内存数组,但我似乎无法将数组指向现有的numpy.ndarray对象。这很关键,因为现有阵列可能非常大(最多几GB),所以我绝对需要避免任何复制操作。

这是我迄今为止所做的尝试:

import multiprocessing as mp
import numpy as np


def f(x, idx):
    """Dummy function to manipulate an array."""
    x[idx] = 999


a = np.array([1.2, 15.8, 10.3, 7.4, -44.9])
b = mp.Array("d", a)  # apparently this creates a copy of a in b
print("Original array:".rjust(28, " "), a)

f(a, 0)
print("Change a[0] in main process:".rjust(28, " "), a)

p = mp.Pool(1)

p.apply_async(f, args=(b, 4))
print("Change b[4] in subprocess:".rjust(28, " "), np.frombuffer(b.get_obj()))

理想情况下,我希望ab引用相同的基础数字,但显然这不起作用。有趣的是,b也不会改变p.apply_async(f, args=(b, 4)) - 这可能与原始问题无关,但我仍然想了解原因。

0 个答案:

没有答案