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
。