2011-10-18 14 views
7

Come posso scrivere meglio la seguente classe? Per esempio c'è un modo carino per scivolare con i due flag is_alive e is_finished?Arresto del thread in python3

Monitor(threading.Thread): 
    def run(self): 
     resource = Resource("com1") 

     self.alive = True 
     self.is_finished = False 
     try: 
      while self.alive: 
       pass # use resource 
     finally: 
      resource.close() 
      self.is_finished = True  

    def stop(self): 
     self.alive = False 
     while not self.is_finished: 
      time.sleep(0.1) 

risposta

8

Questo è praticamente tutto. Tuttavia, non è necessario il is_finished, perché è possibile utilizzare il metodo join():

Monitor(threading.Thread): 
    def run(self): 
     resource = Resource("com1") 

     self.alive = True 
     try: 
      while self.alive: 
       pass # use resource 
     finally: 
      resource.close() 

    def stop(self): 
     self.alive = False 
     self.join() 

Se si ha bisogno di trovare se un thread è in esecuzione, è possibile chiamare mythread.is_alive() - non è necessario impostare questa te stesso.