我在linux机器上使用python2.7和numpy。
我正在运行一个程序,它涉及一个耗时的函数computeGP(level, grid)
,它接受numpy数组level
和一个对象{
我的目标是为不同的computeGP
并行化computeGP
(本地,因此在不同的核心上),但是相同的grid
。由于grid
保持不变,因此可以使用共享内存来完成这项操作,而不必为同步带来麻烦。I've read a bit about threading in python and the GIL在我看来,我应该使用multiprocessing
模块,而不是线程。This和this答案建议使用multiprocessing.Array
来有效地共享,同时注意在unix机器上不复制对象是默认行为。在
我的问题是对象grid
不是numpy数组。
这是一个numpy数组的列表,因为我的数据结构的工作方式是我需要访问array(listelement)N,然后访问它的行K。
基本上这个列表只是伪造指向数组的指针。在
所以我的问题是:
grid
没有进一步使用multiprocessing
数据类型
Array
(或Value
)。对吗?在multiprocessing.Array
?在我不想组装一个包含列表中较小数组的大数组,因为较小的数组也不是真正的小数组。。。在
欢迎有任何想法!在
{你的问题和这个很相似
这里有一些答案,但是如果您只使用linux,最简单的方法是将数据结构作为一个全局变量。Linux将
fork()
进程,这将给所有工作进程提供对主进程内存(全局)的写时拷贝访问权。在在这种情况下,您不需要使用任何特殊的多处理类,也不需要将任何数据传递给工作进程(level除外)。在
相关问题 更多 >
编程相关推荐