0

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

每当我按下刷新按钮时,我都会使用线程调用一个函数,当调用该函数时,主函数内会有另一个函数。

我想要的是每当子函数结束时。我希望在不关闭应用程序或 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函数时杀死旧线程

4

1 回答 1

0

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

你也可以

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

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

于 2013-09-05T12:43:16.363 回答