2013-02-12 64 views
-1

我需要做的是一次又一次地向一個以上的設備運行一組相同的命令。但我需要同時做到這一點。在將該組命令發送到其他設備之前的1-3秒間隔是好的。所以我想使用線程。Python中的線程無法正常工作

下面是代碼的用法。

class UseThread(threading.Thread): 

    def __init__(self, devID): 
     super(UseThread, self).__init__() 
     ... other commands .... 
     ... other commands .... 
     ... other commands .... 

    file = open(os.path.dirname(os.path.realpath(__file__)) + '\Samples.txt','r') 

    while 1: 
     line = file.readline() 
     if not line: 
      print 'Done!' 
      break 
     for Code in cp.options('code'): 
      line = cp.get('product',Code) 
      line = line.split(',') 
      for devID in line: 
       t=UseThread(devID) 
       t.start() 

它能夠跨所有設備一審運行並記錄結果,但對於第二個試驗中,它在那裏說:「老孫命令:喚醒」代碼某處掛

什麼是錯的與使它表現這種方式的線程?

+0

你怎麼調用線程?你的線程代碼應該在函數run(self)中:' – vikki 2013-02-12 07:35:58

+1

閱讀一些關於Python線程模塊的教程。你還沒有掌握基本知識。 – 2013-02-12 07:39:35

+0

@vikki像這樣。 t = UseThread(devID)t.start()。線程代碼在useThread類本身內部(並且它包含很多方法)。所以你的意思是我所做的是錯誤的? – 2013-02-12 07:40:29

回答

0

螺紋代碼必須在run()方法。

無論在__init__()方法中,在創建新對象(因此它是調用線程的一部分)之前,將在設置線程之前調用它。

class UseThread(threading.Thread): 
    def __init__(self, devID): 
     super(UseThread, self).__init__() 
     self.devID = devID 
    def run(self): 
     ## threaded stuff .... 
     ## threaded stuff .... 
     pass 

## ... 
for devID in line: 
    t=UseThread(devID) # this calls UseThread.__init__() 
    t.start()   # this creates a new thread that will run UseThread.run()