What's the proper way of aborting multiprocessing when one of the child aborts and/or throw an Exception?
I found various questions around that (generic multiprocessing error handling, how to close multiprocessing pool on exception but without answer, ...), but no clear answer on how to stop multiprocessing on child exception.
For instance, I expect the following code:
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() To output:
f(0) f(1) f(2) oops: float division by zero end Instead, it applies f function on all items before detecting/handling the exception:
f(0) f(1) f(2) f(4) f(3) f(5) f(6) oops: float division by zero end Isn't there any way to catch the exception directly?
maphas finished. If you definitely want to usemapthere is no way to catch it any earlier, because the exception does not exist any earlier. So, the question is whether you want to stick tomapor are looking for a custom solution?