2013-09-05 125 views
0

我在我的python卡應用程序中使用線程。如何停止python中的線程

每當我按下刷新按鈕,我使用線程調用一個函數,該函數被調用時,就會有另一個函數main函數裏面。

我想是每當孩子函數結束。我想在不關閉應用程序或ctrl + c的情況下殺死或停止線程。

我開始線程這樣

def on_refresh_mouseClick(self,event): 
thread.start_new_thread(self.readalways,()) 

在「readalways」功能,我使用while循環中,只要條件滿足,雖然循環,它會調用continuousread()函數。檢查:

def readalways(self): 
    while 1: 
      cardid = self.parent.uhf.readTagId() 
      print "the tag id is",cardid 
      self.status = self.parent.db.checktagid(cardid) 
      if len(self.status) != 0: 
       break 
    print "the value is",self.status[0]['id'] 
    self.a = self.status[0]['id'] 
    self.continuesread() 

def continuesread(self): 
....... 
    ....... 

continuesread讀功能後,在線程應該被清除的值。

因爲,如果我再次點擊刷新按鈕,一個新的線程正在啓​​動,但某些值從舊線程到來。

,所以我想,當它完成了continuesread功能來殺死老線程

+0

我的理解是否正確,因爲一旦你的線程被殺死,你想關閉主應用程序?如果是這種情況,你可以使用sys.exit(),但這取決於你的主應用程序正在使用什麼。 –

回答

0

請注意,從同一進程共享他們的記憶,例如不同的線程當您訪問self.status時,您(可能)會操作整個進程內共享的對象。因此,即使你的線程在完成continuesread(他們可能是)時被終止,被操縱對象的狀態仍然保持不變。

你既可以

  • 保持狀態在一個局部變量,而不是自我的屬性,
  • 初始化這些屬性進入readalways時,
  • 或保存在一個線程的本地存儲這種狀態對象,它不共享(請參閱documentation)。

第一個似乎是最好的,據我可以看到。