[英]python: multi-threading inside a for loop
我必須使用固定時間步驟解決ODE系統。 在每個時間步長上,我必須計算出許多類似方程式的輸出(我正在對神經網絡進行編程,並且必須計算每個神經元的值。這些神經元由ODE系統表示)。 因此,我想在循環內部並行計算。 我嘗試使用線程包,但是我應該做錯了一些事情,因為它不起作用...(在以下代碼中,為清楚起見,我跳過了輸入的生成)
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()
問題是我的系統管理器中沒有看到任何並行活動...
感謝您的評論/幫助,
皮埃爾
問題是我的系統管理器中沒有看到任何並行活動
這是因為由於全局解釋器鎖, Python線程不會分布在多個CPU /內核上。 使用multiprocessing
或joblib
編寫並行的Python程序。
您直接調用run()
,它在同一線程中運行代碼。 run()
必須沒有參數。 構造對象時,應傳遞每個參數,然后調用start()
在新線程中運行它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.