如何在python中使用自定义数据结构进行多处理

2024-05-21 05:48:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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模块,而不是线程。Thisthis答案建议使用multiprocessing.Array来有效地共享,同时注意在unix机器上不复制对象是默认行为。在

我的问题是对象grid不是numpy数组。 这是一个numpy数组的列表,因为我的数据结构的工作方式是我需要访问array(listelement)N,然后访问它的行K。 基本上这个列表只是伪造指向数组的指针。在

所以我的问题是:

  1. 我的理解是,在unix机器上我可以共享这个对象 grid没有进一步使用multiprocessing数据类型 Array(或Value)。对吗?在
  2. 有更好的方法吗 实现这个指向数组数据结构的指针 高效multiprocessing.Array?在

我不想组装一个包含列表中较小数组的大数组,因为较小的数组也不是真正的小数组。。。在

欢迎有任何想法!在


Tags: 对象函数numpy机器数据结构列表unix数组
1条回答
网友
1楼 · 发布于 2024-05-21 05:48:16

{你的问题和这个很相似

这里有一些答案,但是如果您只使用linux,最简单的方法是将数据结构作为一个全局变量。Linux将fork()进程,这将给所有工作进程提供对主进程内存(全局)的写时拷贝访问权。在

在这种情况下,您不需要使用任何特殊的多处理类,也不需要将任何数据传递给工作进程(level除外)。在

相关问题 更多 >