无法退出多线程循环

时间:2019-07-14 01:17:54

标签: python multithreading queue

如果发生错误,我无法破坏以下功能。

def run(self, max_workers=10):
    outputs = {}

    q = queue.Queue()
    for key, ground_truth in self.ground_truths.items():
        q.put((key, ground_truth))

    count = {}
    count['total_finish'] = 0
    start_time = time.time()

    def worker():
        while True:
            try:
                key, value = self.pred_on_one_image(q.get())
                outputs[key] = value
                count['total_finish'] += 1
            except:
                os._exit()
            finally:
                q.task_done()

    for i in range(max_workers):
        t = Thread(target=worker)
        t.daemon = True
        t.start()

    q.join()

    return outputs

我尝试使用returnq.put(None)sys.exit(),但是它们都不起作用,我必须手动Ctrl+C才能将其破坏。

2 个答案:

答案 0 :(得分:0)

quit()exit()通常对我有用。

答案 1 :(得分:0)

设置q.get(block=False)引发Empty,如果队列为空,则异常。否则,队列将等到队列中的项目可用。 block的默认值为True,因此,队列被阻塞并且没有引发异常。