在ParallelPython中,对象的方法(object.func())无法操作对象的变量(object.value)

时间:2012-03-30 10:34:39

标签: python oop parallel-processing parallel-python

使用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只接受函数和对象,在其他地方计算它,但永远不会返回对象,所以我留下旧的。

我想念什么?

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

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

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

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