当其中一个孩子中止和/或抛出异常时,中止多处理的正确方法是什么?
我发现了各种各样的问题(通用多处理错误处理,如何在异常但没有答案时关闭多处理池,...),但没有关于如何停止对子异常进行多处理的明确答案。
例如,我期望以下代码:
def f(x):
sleep(x)
print(f"f({x})")
return 1.0 / (x - 2)
def main():
with Pool(4) as p:
try:
r = p.map(f, range(7))
except Exception as e:
print(f"oops: {e}")
p.close()
p.terminate()
print("end")
if __name__ == '__main__':
main()
输出:
f(0)
f(1)
f(2)
oops: float division by zero
end
相反,它f
在检测/处理异常之前对所有项目应用函数:
f(0)
f(1)
f(2)
f(4)
f(3)
f(5)
f(6)
oops: float division by zero
end
没有办法直接捕获异常吗?