在共享内存中使用 numpy 数组进行多处理
在共享内存中使用 numpy 数组对于高效的多处理任务至关重要。多处理模块提供了一种在多个进程之间分配工作负载的简单方法,但是处理在这些进程之间共享的 numpy 数组会带来挑战。
在提供的代码片段中,尝试使用 multiprocessing.Array 类共享 numpy 数组被制成。虽然这允许访问单个数组元素,但它并不完全支持 numpy 数组操作。
要解决此问题,请考虑使用 shared_arr.get_lock() 方法来确保必要时同步访问:
def f(i): with shared_arr.get_lock(): arr = np.frombuffer(shared_arr.get_obj()) arr[i] = -arr[i]
此方法确保在任何给定时间只有一个进程可以修改共享数组,从而保持数据完整性。
另一种方法可以消除这种需要显式同步的方法是:
def f(i): arr = np.frombuffer(shared_arr.get_obj()) arr[i] = -arr[i]
这是有效的,因为 Python 的 GIL(全局解释器锁)对所有 Python 字节码执行(包括 numpy 代码)强制执行单线程。 GIL 确保一次只有一个执行线程可以访问共享内存。
最后,如果不需要同步访问,请考虑使用 multiprocessing.sharedctypes.RawArray 类。 RawArray不提供任何同步机制,适合实现自定义锁定机制的场景。
以上是如何在 Python 中高效使用共享内存中的 NumPy 数组进行多重处理?的详细内容。更多信息请关注PHP中文网其他相关文章!