很抱歉,我不能用一个更简单的例子重现这个错误,而且我的代码太复杂,无法发布.如果我用IPython shell而不是普通的Python运行这个程序,事情就会进展顺利.
我查阅了以前关于这个问题的一些笔记.它们都是由使用池调用类函数中定义的函数引起的.但对我来说情况并非如此.
Exception in thread Thread-3:
Traceback (most recent call last):
File "/usr/lib64/python2.7/threading.py", line 552, in __bootstrap_inner
self.run()
File "/usr/lib64/python2.7/threading.py", line 505, in run
self.__target(*self.__args, **self.__kwargs)
File "/usr/lib64/python2.7/multiprocessing/pool.py", line 313, in _handle_tasks
put(task)
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
我将非常感谢您的帮助.
Update:函数i Pickle在模块的顶层定义.虽然它调用包含嵌套函数的函数.即,f()
调用g()
调用h()
,而h()
具有嵌套函数i()
,而我正在调用pool.apply_async(f)
.f()
、g()
、h()
都是在顶层定义的.我使用此模式try 了更简单的示例,但它仍然有效.