2013-09-05 84 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)。

第一个似乎是最好的,据我可以看到。