假设我有一个任务队列,其使用者如下(这与示例代码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类手动实现所有这些吗
目前没有回答
相关问题 更多 >
编程相关推荐