2012-03-30 44 views
1

使用parallelpython時,我試圖將我的舊串行代碼轉換爲並行,這嚴重依賴於具有更改該對象變量的方法的對象。其中我省略了語法支持簡單的剝離例如:在ParallelPython中,對象的方法(object.func())無法處理對象的變量(object.value)

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")) 

作業被sumbitted,我知道一個很長的計算需要所以我推測我的代碼已經運行。

問題是,我是新來的parallelpython,我期待,當調用方法時,變量net2.equilibria將被相應地編寫,並且我會得到一個修改後的對象(net2)。這就是我的代碼的工作方式,獨立對象的方法對對象的變量起作用。

相反,雖然計算是明顯的,併合理計時,但變量net2.equilibria保持不變。 就好像PP只接受函數和對象,在其他地方計算它,但從不返回對象,所以我留下了舊的。

我錯過了什麼?

在此先感謝。

回答

1

ParallelPython不能這樣工作。向作業服務器提交函數時,您會得到一個可以調用以獲取計算結果的句柄。這是獲得計算結果的唯一方法。本地對象不會被遠程併發進程修改。

你應該做的是包裹,它返回對象的新狀態的函數內部方法調用:

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

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

感謝。這非常全面。 – 2012-03-30 12:13:00

相關問題