我有可停止的可重用线程。
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()上使用超时或让它解锁。
答案 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()