Я бы изменил условие в вашем цикле while, чтобы он проверял локальную переменную.Добавить добавить kill-switch, чтобы позволить внешнему процессу завершить работу потока.Вам, вероятно, следует расширить kill_me
, чтобы утилизировать объект и его Очередь хорошим способом (например, если вы хотите сохранить Очередь при следующем запуске).
Редактировать IТакже добавлена переменная has_finished
, поэтому kill_me
должен блокировать основной поток процесса.Это должно позволить потоку выйти перед передачей обратно в основной поток.
У меня могут быть слишком сложные вещи;)
class test(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.request_queue = Queue.Queue()
self.is_running = True
self.has_finished = False
def addtoqueue(self, item):
self.request_queue.put(item)
def kill_me(self):
self.is_running = False
while not self.has_finished:
pass
def run(self):
while self.is_running:
item = self.request_queue.get(True)
print item
self.has_finished = True