Python | A process in the process pool was terminated abruptly while the future was running or pending
错误处理。
问题/错误
代码报错A process in the process pool was terminated abruptly while the future was running or pending
原因
原因是在多进程(ProcessPoolExecutor)中,multiprocessing.Manager().dict()和multiprocessing.Manager().list()不能作为返回值,和pool.submit().result()有冲突。
猜测和序列化有关,没有深究。
解决方法
本质上都是要保证在子程序return时,返回值是dict或list。
推荐方法一。
方法一 使用普通dict和list
在子程序里没必要使用进程安全的multiprocessing.Manager().dict()和multiprocessing.Manager().list(),可以直接使用普通dict和list。
方法二 使用copy
也可以在return之前,使用copy或deepcopy转成普通dict和list。
总结
multiprocessing.Manager().dict()、multiprocessing.Manager().list()和pool.submit().result()有冲突。
所以要保证在子程序return时,返回值是dict或list。