from concurrent.futures.process import ProcessPoolExecutor class PoolBreaker(Exception): def __init__(self, num): super().__init__() self.num = num class NoPoolBreaker(Exception): def __init__(self, num=0): super().__init__() self.num = num class NoPoolBreaker2(Exception): def __init__(self, num): super().__init__(num) self.num = num class NoPoolBreaker3(Exception): def __init__(self, num): self.num = num def get_result(job): exc = job.exception() if type(exc) is PoolBreaker: print("PoolBreaker", exc.num) elif type(exc) is NoPoolBreaker: print("NoPoolBreaker", exc.num) elif type(exc) is NoPoolBreaker2: print("NoPoolBreaker2", exc.num) elif type(exc) is NoPoolBreaker3: print("NoPoolBreaker3", exc.num) else: print(f"Exception: {str(exc)}") def work(x: int): if x == 0: raise PoolBreaker(x) elif x == 1: raise NoPoolBreaker(x) elif x == 2: raise NoPoolBreaker2(x) elif x == 3: raise NoPoolBreaker3(x) if __name__ == '__main__': for num in range(0, 4): with ProcessPoolExecutor() as executor: job = executor.submit(work, num) get_result(job)