Python进程池报错
Traceback (most recent call last):
File "data_pool2.py", line 86, in <module>
processData1()
File "data_pool2.py", line 75, in processData1
print('res:',res[0].get().shape,len(res))
File "D:\python_fancp\Anaconda3.7\lib\multiprocessing\pool.py", line 657, in get
raise self._value
File "D:\python_fancp\Anaconda3.7\lib\multiprocessing\pool.py", line 431, in _handle_tasks
put(task)
File "D:\python_fancp\Anaconda3.7\lib\multiprocessing\connection.py", line 206, in send
self._send_bytes(_ForkingPickler.dumps(obj))
File "D:\python_fancp\Anaconda3.7\lib\multiprocessing\reduction.py", line 51, in dumps
cls(buf, protocol).dump(obj)
TypeError: can't pickle cv2.dnn_Net objects
原因就是:
神经网络CNN的模型加载中不能用类Class的self变量,将相关的模型加载过程,修改为全局变量,解决问题。
这种方式加载模型报错
class FaceFeatureAPI:
def __init__(self, pb_path):
self.opencv_net = cv2.dnn.readNetFromTensorflow(pb_path)
改为全局变量加载
PB_PATH = os.path.join(r"./models", "frozen_model.pb")
opencv_net = cv2.dnn.readNetFromTensorflow(PB_PATH)