python:for循环中的多线程

时间:2012-03-16 11:19:37

标签: python multithreading

我必须使用修复时间步骤来解决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()

问题是我在系统管理器中没有看到任何并行活动......

感谢您的意见/帮助,

皮尔

2 个答案:

答案 0 :(得分:1)

  

问题是我的系统管理器中没有看到任何并行活动

这是因为由于global interpreter lock,Python线程不会分布在多个CPU /核心上。使用multiprocessingjoblib编写并行Python程序。

答案 1 :(得分:0)

你直接调用run(),它在同一个线程中运行代码。 run()必须没有参数。您应该在构造对象时传递每个参数,然后调用start()以在新线程中运行它。