队列工作者能否向父级发出失败信号?

2024-04-19 21:58:27 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个任务队列,其使用者如下(这与示例代码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类手动实现所有这些吗


Tags: in示例forexecute队列queuedef使用者