python kill线程等待排队的任务

时间:2014-12-24 08:12:57

标签: python multithreading

我有可停止的可重用线程。

class _Thread(threading.Thread):

  def __init__(self, function, queue):
    super(_Thread, self).__init__()
    self._stop = threading.Event()
    self._function = function
    self._queue = queue
    self.daemon = True

  def run(self):
    while not self._stop.isSet():
      item = self._queue.get()
      item.result = self._function(item.args)
      self._queue.task_done()
      item.setReady()

  def stop(self):
    self._stop.set()

  def isStopped(self):
    return self._stop.isSet()

我需要杀死线程所有正在处理的任务。怎么做?这里的停止信号确实不起作用,因为线程停留在_queue.get()。我不想在get()上使用超时或让它解锁。

1 个答案:

答案 0 :(得分:1)

而不是“停止”变量,在队列中插入一个特殊项目(例如,None),告诉线程退出。

  def run(self):
    while True:
      item = self._queue.get()
      if item is None:
        return
      item.result = self._function(item.args)
      self._queue.task_done()
      item.setReady()