这是我所做的大概将mxnet导入为mx导入cv2来自多处理导入池来自itertools导入重复
num_worker = 4CNNNet = []img = cv2.imread(‘../ datasets / 1.jpg’)sym,…
你得到这个例外的原因是因为 multiprocessing 需要能够 泡菜 传递给工作者的变量,以便在它产生的各种进程之间传递它们。
multiprocessing
错误:
TypeError: can't pickle module objects
建议您传递给您的其中一个变量 Pool 包含一个模块(或一个具有模块作为属性的类)。
Pool
要演示此问题,请查看以下两个类:
import os class Pickable: a = 1 class UnPickable: def __init__(self): self.mod = os
如果你试图挑选这两个类的实例,你会得到:
In [11]: pickle.dumps(Pickable()) Out[11]: b'\x80\x03c__main__\nPickable\nq\x00)\x81q\x01.' In [10]: pickle.dumps(UnPickable()) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-10-7d4d725a1c6d> in <module>() ----> 1 pickle.dumps(UnPickable()) TypeError: can't pickle module objects
话虽如此 - 要么你创建自己的类来模仿其功能 mx.mod.Module ,但是可序列化 - 或者(在我看来更好的解决方案)使用简单的python-builtin类型将变量传递给你的工作者 Pool 和构造 mx.mod.Module 他们内部的实例是他们自己的。
mx.mod.Module