Multiprocessamento Python: interromper o mapa no erro do primeiro filho

Qual é a maneira correta de interromper o multiprocessamento quando uma criança interrompe e / ou lança uma exceção?

Encontrei várias perguntas sobre isso (tratamento genérico de erros de multiprocessamento, como fechar o pool de multiprocessamento em exceção, mas sem resposta, ...), mas nenhuma resposta clara sobre como parar o multiprocessamento na exceção filho.

Por exemplo, espero o seguinte código:

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()

Para saída:

f(0)
f(1)
f(2)
oops: float division by zero
end

Em vez disso, aplica-sef função em todos os itens antes de detectar / manipular a exceção:

f(0)
f(1)
f(2)
f(4)
f(3)
f(5)
f(6)
oops: float division by zero
end

Não há como capturar a exceção diretamente?

questionAnswers(1)

yourAnswerToTheQuestion