2011-10-18 17 views
7

Jak mogę lepiej napisać następującą klasę? Na przykład czy istnieje dobry sposób na poślizgnięcie się, gdy dwie flagi są już aktywne i zakończone?Zatrzymywanie wątku w 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) 

Odpowiedz

8

To wszystko. Jednak nie trzeba się is_finished, ponieważ można użyć metody 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() 

Jeśli trzeba znaleźć, jeśli wątek jest uruchomiony, można zadzwonić mythread.is_alive() - nie trzeba ustawić to siebie.