2013-09-05 2 views
0

Я использую thread в моем приложении для python.Как остановить поток в python

всякий раз, когда я нажимаю кнопку обновления, я вызываю функцию с помощью потока, когда функция вызывалась, внутри основной функции будет другая функция.

что я хочу, когда заканчивается дочерняя функция. Я хочу, чтобы поток был убит или остановлен без закрытия приложения или ctrl + c.

я начал нить, как этот

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

в «readalways» функции я использую в то время как цикл, в этом цикле в то время, когда условие удовлетворяет он будет вызывать функцию 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).

Первый, по-видимому, лучший, насколько я могу судить.

Смежные вопросы