首页 > 后端开发 > Python教程 > 如何在共享内存中高效使用 NumPy 数组进行多重处理?

如何在共享内存中高效使用 NumPy 数组进行多重处理?

Linda Hamilton
发布: 2024-12-17 05:40:25
原创
638 人浏览过

How Can I Efficiently Use NumPy Arrays in Shared Memory for Multiprocessing?

在共享内存中使用 Numpy 数组进行多处理

将共享内存用于 numpy 数组在多处理场景中很常见。然而,充分利用它们作为 numpy 数组(而不仅仅是 ctypes 数组)的潜力可能是一个挑战。

解决方案在于利用多处理模块中的 mp.Array() 。该函数允许创建可由多个进程同时访问的共享数组。要将这些数组作为 numpy 数组访问,您可以使用 numpy.frombuffer(),而不会产生任何数据复制开销。

示例:

import multiprocessing as mp
import numpy as np

def f(shared_arr):
    arr = np.frombuffer(shared_arr.get_obj()) 
    arr[:] = -arr[:] 

if __name__ == '__main__':
    N = 10
    shared_arr = mp.Array(ctypes.c_double, N) 
    arr = np.frombuffer(shared_arr.get_obj()) 

    # Create, start, and finish child processes
    p = mp.Process(target=f, args=(shared_arr,)) 
    p.start() 
    p.join()
登录后复制

在此示例中,f() 函数使用共享数组来执行逐元素求反。通过将数组作为 numpy 数组进行访问,您可以访问其所有强大的操作和方法。

同步:

当多个进程访问同一个共享数组时,同步对于防止冲突至关重要。 mp.Array() 提供了 get_lock() 方法,允许您根据需要同步访问。

# ...
def f(i): 
    with shared_arr.get_lock(): # synchronize access
        arr = np.frombuffer(shared_arr.get_obj()) 
        arr[i] = -arr[i] 
登录后复制

利用这种方法,您可以在多处理环境中共享 numpy 数组,同时保持其作为 numpy 数组的完整功能。

以上是如何在共享内存中高效使用 NumPy 数组进行多重处理?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板