队列工作人员可以向父母发出信号失败吗?

时间:2015-11-18 17:31:51

标签: python multithreading

想象一下,我有一个像这样的消费者的任务队列(这几乎与示例代码here相同):

def worker(tasks):
    while True:
        try:
            item = tasks.get_nowait()
        except:
            return
        execute(item)
        tasks.task_done()

和这样的制作人:

def batch_execute(items, n_threads):
    tasks = Queue()
    for item in items:
        tasks.put(item)
    for n in range(n_threads):
        t = threading.Thread(target=worker, args=tasks)
        t.start()
    tasks.join()

这是有效的,除了execute(item)可以抛出异常。如果发生这种情况,给定的线程将保释,其他线程继续运行,tasks.join()将无限期挂起。这两个特征都是不可取的。是否存在人们使用的典型设计,例如将子线程中的异常“转发”到父线程中并取消阻止tasks.join()?或者我是否必须手动实现python的Queue类的所有内容?

0 个答案:

没有答案