1

使用parallelpython,我正在尝试将旧的串行代码转换为并行代码,这在很大程度上依赖于具有更改该对象变量的方法的对象。一个剥离的例子,我为了简单而省略了语法:

class Network:
    self.adjacency_matrix = [ ... ]
    self.state = [ ... ]
    self.equilibria = [ ... ]

...

   def populate_equilibria(self):
       # this function takes every possible value that self.state can be in
       # runs the boolean dynamical system 
       # and writes an integer within self.equilibria for each self.state
       # doesn't return anything

我将此方法称为:代码:

j1 = jobserver.submit(net2.populate_equilibria,(),(),("numpy as num"))

这项工作已完成,并且我知道发生了长时间的计算,因此我推测我的代码已运行。

问题是,我是 parallelpython 的新手,我期待在调用该方法时,变量 net2.equilibria 会被相应地写入,我会得到一个修改后的对象 (net2) 。这就是我的代码的工作方式,独立对象具有作用于对象变量的方法。

相反,尽管计算是显而易见的,并且时间合理,但变量 net2.equilibria 保持不变。好像 PP 只接受函数和对象,在别处计算它,但从不返回对象,所以我只剩下旧的了。

我想念什么?

提前致谢。

4

1 回答 1

1

ParallelPython 不能以这种方式工作。当您向作业服务器提交函数时,您会获得一个句柄,您可以调用该句柄来获取计算结果。这是获得计算结果的唯一方法。本地对象不会被远程并发进程修改。

您应该做的是将您的方法调用包装在一个返回对象新状态的函数中:

def populate_equilibria (obj):
    obj.populate_equilibria()
    return obj

j1 = jobserver.submit(populate_equilibria,(net2,),(),("numpy as num"))
net2 = j1()
于 2012-03-30T11:27:20.340 回答