运行results = pool.map(self.face_recognize, numbers)报错Pickling an AuthenticationString object is ' TypeError: Pickling an AuthenticationString object is disallowed for security reasons
时间: 2024-03-27 20:37:20 浏览: 17
这个错误是由于在使用`multiprocessing.Pool`的`map`方法时,尝试序列化了一个未知安全级别的对象(这里是`AuthenticationString`对象)导致的。解决方法如下:
1. 将`AuthenticationString`对象转换为字符串或者其他可序列化的数据类型,然后再传递给`face_recognize`函数。
2. 尝试将`pickle`的安全级别设置为1或0,如下所示:
```
import multiprocessing as mp
import pickle
mp.set_start_method('spawn') # 必须先设置 start_method
mp.set_pickle(pickle.HIGHEST_PROTOCOL) # 将pickle安全级别设置为0或1
pool = mp.Pool(processes=4)
results = pool.map(self.face_recognize, numbers)
pool.close()
pool.join()
```
3. 尝试使用`dill`模块代替`pickle`模块,因为`dill`支持序列化更多类型的对象。可以这样使用:
```
import dill as pickle
import multiprocessing as mp
mp.set_start_method('spawn') # 必须先设置 start_method
pool = mp.Pool(processes=4)
results = pool.map(self.face_recognize, numbers)
pool.close()
pool.join()
```
希望这些解决方法能够帮到你。