2011-10-18 9 views
7

¿Cómo puedo escribir mejor la siguiente clase? Por ejemplo, ¿hay una buena manera de evitar tener las dos banderas is_alive y is_finished?Detener el hilo en 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) 

Respuesta

8

Eso es todo. Sin embargo, no es necesario el is_finished, porque se puede utilizar el método de 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() 

Si necesita encontrar un hilo si se está ejecutando, puede llamar mythread.is_alive() - que no es necesario establecer este tú mismo.

Cuestiones relacionadas