2012-03-16 97 views
0

我必須使用修復時間步驟解決ODE系統。在每個時間步驟中,我必須計算許多類似方程的輸出(我正在編程一個神經網絡,我必須計算每個神經元的值,這些神經元由一個ODE系統表示)。因此,我想平行循環內的計算。我嘗試使用線程包,但我應該做一些錯誤的,因爲它不工作...(在下面的代碼,我跳過輸入爲清晰代)python:for循環中的多線程

class EBNMCPU(threading.Thread): 
    def __init__(self, threadID, Ts, OnDir): 
    self.threadID = threadID 
    self.Neuron=NM.EBN(Ts,Dir=OnDir) 
    threading.Thread.__init__(self) 
    def run(self,Glu=[np.array([1.0],dtype='float'),0.0],GlyOPN=np.array([1.0],dtype='float'),GlyIBN=np.array([0.0],dtype='float')): 
    threadLock.acquire() 
    self.Neuron.NextStep(Glu, GlyOPN, GlyIBN) 
    threadLock.release() 

    def getOutput(self): 
    return self.Neuron.getOutput() 

if __name__ == '__main__': 
    Ts=np.array([0.005] , dtype=float) 

    threadLock = threading.Lock() 
    EBN=[] 
    for ii in np.arange(0,10): 
     EBN.append(EBNMCPU(ii,Ts,OnDir=0.0)) 

    for tc in EBN: 
    tc.start() 

    for ii in np.arange(0,NSample): 
    for tc in EBN: 
     tc.run([np.array([AllY[ii,1]]),0.0],np.array([AllY[ii,2]]),np.array([AllY[ii,3]])) 

    for tc in EBN: 
     tc.join() 

的問題是,我做的看不到任何並行活動在我的系統管理員...

謝謝您的意見/幫助,

皮埃爾

回答

0

你直接調用run(),它運行在同一個線程的代碼。 run()必須沒有參數。在構建對象時應該傳遞每個參數,然後調用start()以在新線程中運行它。