如果发生错误,我无法破坏以下功能。
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
我尝试使用return
,q.put(None)
,sys.exit()
,但是它们都不起作用,我必须手动Ctrl+C
才能将其破坏。
答案 0 :(得分:0)
quit()
和exit()
通常对我有用。
答案 1 :(得分:0)
设置q.get(block=False)
引发Empty
,如果队列为空,则异常。否则,队列将等到队列中的项目可用。 block
的默认值为True,因此,队列被阻塞并且没有引发异常。