Discuss / Python / 问题及解决分享

问题及解决分享

Topic source

#1 Created at ... [Delete] [Delete and Lock User]

在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)

之后就可以运行了。


  • 1

Reply