簡體   English   中英

Python:for循環內的多線程

[英]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 /內核上。 使用multiprocessingjoblib編寫並行的Python程序。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM