2013-02-12 3 views
-1

내가해야 할 일은 두 개 이상의 장치에 동일한 명령을 반복해서 실행하는 것입니다. 하지만 동시에 그것을해야합니다. 한 세트의 명령을 다른 장치에 보내기 전에 1-3 초 간격이 적당합니다. 그래서 스레드를 사용하여 생각했습니다.파이썬의 스레드가 작동하지 않습니다.

코드는 다음과 같습니다.

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() 

모든 장치에서 1 심에 대한 기록 결과를 실행 할 수 있었지만 2 재판, 그것은 "원숭이 명령 : 웨이크"라는 코드 어딘가에 걸려

이 무엇을 잘못 이런 식으로 행동하게하는 쓰레드로?

+0

스레드를 어떻게 호출합니까? 스레드 된 코드는'run (self) :'함수 안에 있어야합니다. – vikki

+1

파이썬 스레딩 모듈에 관한 튜토리얼을 읽어보십시오. 당신은 아직 기본을 잡지 못했습니다. –

+0

@vikki. t = UseThread (devID) t.start(). 쓰레드 된 코드는 useThread 클래스 내부에 있고 많은 메소드를 포함하고있다. 내가 한 짓이 잘못 됐다는 뜻 이니? –

답변

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() 
관련 문제