Can't pickle <function <lambda> at 0x0000027F6D5951C0>: attribute lookup <lambda> on __main__ failed
File "F:\Users\hkan\Documents\VisualStudioCode\PythonLearnitagain\distributeMaster.py", line 42, in <module> manager.start()_pickle.PicklingError: Can't pickle <function <lambda> at 0x0000027F6D5951C0>: attribute lookup <lambda> on __main__ failed
偘
在Window10上用VScode 直接运行Manager 代码会报Pickling错误,如下:
Exception has occurred: PicklingError
Can't pickle <function <lambda> at 0x0000027F6D5951C0>: attribute lookup <lambda> on __main__ failed
File "F:\Users\hkan\Documents\VisualStudioCode\PythonLearnitagain\distributeMaster.py", line 42, in <module> manager.start()_pickle.PicklingError: Can't pickle <function <lambda> at 0x0000027F6D5951C0>: attribute lookup <lambda> on __main__ failed
原因是代码中的以下位置使用了匿名函数,
QueueManager.register('get_task_queue', callable = lambda:task_queue)
QueueManager.register('get_result_queue', callable = lambda:result_queue)
解决方法是将匿名函数修改为一般的函数名就可以了,需要先定义普通函数,然后在callable参数处填入函数名,如下:
def get_task_queue():
return task_queue
def get_result_queue():
return result_queue
QueueManager.register('get_task_queue', callable = get_task_queue)
QueueManager.register('get_result_queue', callable = get_result_queue)
之后就可以运行了。