如何在python中停止一个线程

时间:2013-09-05 12:21:45

标签: python multithreading thread-safety pythoncard

我在我的python卡应用程序中使用线程。

无论何时按下刷新按钮我都在使用线程调用函数,当调用函数时,main函数内会有另一个函数。

我想要的是每当子功能结束时。我希望在不关闭应用程序或ctrl + c的情况下杀死或停止线程。

我开始这样的线程

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

在“ readalways ”函数中,我正在使用while循环,因为只要条件满足,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):
 .......
    .......

continueread 读取函数之后,应该清除线程​​中的值。

因为,如果我再次单击刷新按钮,则新线程正在启​​动,但某些值来自旧线程。

所以我想在完成 continueread 功能

时终止旧线程

1 个答案:

答案 0 :(得分:0)

请注意,来自同一进程的不同线程共享其内存,例如当您访问self.status时,您(可能)操纵在整个过程中共享的对象。因此,即使你的线程在完成continuesread(它们可能是什么)时被杀死,被操纵对象的状态仍将保持不变。

你可以

  • 将状态保存在局部变量中,而不是self的属性
  • 在输入readalways
  • 时初始化这些属性
  • 或将此状态保存在未共享的线程对象的本地存储中(请参阅documentation)。

就我所见,第一个似乎是最好的。