我正在尝试使用 multiprocessing.Pool
实现多线程应用程序。为了共享一些变量,我正在使用一个 Queue
,如此处所示(链接):
def get_prediction(data):
#here the real calculation will be performed
....
def mainFunction():
def get_prediction_init(q):
print("a")
get_prediction.q = q
queue = Queue()
pool = Pool(processes=16, initializer=get_prediction_init, initargs=[queue,])
if __name__== '__main__':
mainFunction()
这段代码在Debian机器上完美运行,但在另一台Windows 10设备上根本无法工作。它会出现错误
AttributeError: Can't pickle local object 'mainFunction.<locals>.get_prediction_init'
我并不确定是什么导致了这个错误。我应该如何解决这个问题,以便能在Windows设备上运行代码?
编辑:如果我在与
mainFunction
相同的层次上创建get_predediction_init
函数,则问题得到解决。当我将其定义为内部函数时,它才会失败。对于我帖子中的混淆表示抱歉。
mainFunction..get_prediction_init
上看到了2个点。 - Pedro Lobitomultiprocessing
代码应该由if __name__ == '__main__':
保护。 - roganjoshPicklingError
异常。 - roganjosh