调用 pool.apply_async 后没有报错直接退出,导致我一直以为是 join 后主进程没有阻塞,直接结束导致子进程直接退出。原来是子进程的执行时有error,但是没有捕获到
import multiprocessing as mp class A: def __init__(self,re): self.re = re def do_stuff(num): result = 5/(2 - num) #Line 8 return A(result) def success_handler(result:A): print("success",result.re) def error_handler(e): print(e.__cause__) if __name__ == '__main__': with mp.Pool(2) as my_pool: results = [ my_pool.apply_async( do_stuff, args=(i,), callback=success_handler, error_callback=error_handler ) for i in range(3) ] try: for result_obj in results: print("result is: {}".format(result_obj.get())) except ZeroDivisionError as e: print("Oh, boy. This is the second time I've seen this error.")