如何在python中使用具有多处理功能的自定义数据结构
我正在linux机器上使用python 2.7和numpy。 我正在运行一个程序,该程序涉及一个耗时的函数如何在python中使用具有多处理功能的自定义数据结构,python,python-2.7,numpy,data-structures,multiprocessing,Python,Python 2.7,Numpy,Data Structures,Multiprocessing,我正在linux机器上使用python 2.7和numpy。 我正在运行一个程序,该程序涉及一个耗时的函数computeGP(level,grid),该函数以numpy数组level和对象grid的形式接收输入,该函数不修改该输入 我的目标是为不同的级别但相同的网格并行化computeGP(本地,在不同的内核上也是如此)。由于grid保持不变,因此使用共享内存无需进行同步。在我看来,我应该使用多处理模块,而不是线程。答案建议使用multiprocessing.Array高效共享,同时注意到在un
computeGP(level,grid)
,该函数以numpy数组level
和对象grid
的形式接收输入,该函数不修改该输入
我的目标是为不同的级别
但相同的网格
并行化computeGP
(本地,在不同的内核上也是如此)。由于grid
保持不变,因此使用共享内存无需进行同步。在我看来,我应该使用多处理
模块,而不是线程。答案建议使用multiprocessing.Array
高效共享,同时注意到在unix机器上,默认行为是不复制对象
我的问题是对象网格不是numpy数组。
这是一个numpy数组列表,因为我的数据结构的工作方式是,我需要访问数组(listelement)N,然后访问它的行K。
基本上,该列表只是伪造指向数组的指针
因此,我的问题是:
我的理解是,在unix机器上,我可以共享对象
网格
无需进一步使用多处理
数据类型
数组
(或值
)。对吗李>
有没有更好的方法
实现这个指向数组数据结构的指针,它可以使用
高效的多处理。数组
我不想组装一个包含列表中较小的数组的大型数组,因为较小的数组也不是很小
欢迎有任何想法 这个问题与你的问题非常相似:
这里有一些答案,但如果您只使用linux,最简单的方法就是将数据结构设置为全局变量。Linux将fork()
进程,它允许所有工作进程对主进程内存(全局)进行写时拷贝访问
在这种情况下,您不需要使用任何特殊的多处理类,也不需要将任何数据传递给工作进程(级别除外)。因此,这个问题与您的问题非常相似:
这里有一些答案,但如果您只使用linux,最简单的方法就是将数据结构设置为全局变量。Linux将fork()
进程,它允许所有工作进程对主进程内存(全局)进行写时拷贝访问
在这种情况下,您不需要使用任何特殊的多处理类,也不需要将任何数据传递给工作进程(级别除外)