使用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只接受函数和对象,在其他地方计算它,但永远不会返回对象,所以我留下旧的。
我想念什么?
提前致谢。
答案 0 :(得分:1)
ParallelPython不能以这种方式工作。当您向作业服务器提交函数时,您将获得一个句柄,您可以调用该句柄来获取计算结果。这是获得计算结果的唯一方法。远程并发进程不会修改本地对象。
你应该做的是将方法调用包装在一个函数中,该函数返回对象的新状态:
def populate_equilibria (obj):
obj.populate_equilibria()
return obj
j1 = jobserver.submit(populate_equilibria,(net2,),(),("numpy as num"))
net2 = j1()