
本文讲述了, “Cant”的应对举措, 对于众人解决难题存有一定的参考意义, 有需求的友人们, 接下来跟着小编一同去学习吧问题描述限时送账号..万分遗憾, 以更为简易的示例去重现那个错误, 我实在做不到, 而且我的代码繁杂到难以发布。要是我在shell里运行程序, 而非常规的那种环境下运行, 所有状况都会顺畅开展。我查找了跟这个问题相关的一些以往的注释, 它们全都是因运用池调用类函数里所定义的函数导致的, 然而对我来讲并非如此。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: Cant pickle : attribute lookup __builtin__.function failed如果有任何帮助我将不胜感激.I would any help.更新 , 我的函数定义处于模块的顶层。纵然它调用了一个有着嵌套函数的函数 , 也就是说 , f() 调用 g() , 而 g() 调用有着嵌套函数 i() 的 h() , 我正在调用 pool.(f) , f() 、g() 、h() 皆是在顶层定义的。我运用这种模式尝试了更为简单的例子 , 但它的确是有效的。推荐答案这一片存在着一个能够用于腌制的内容清单, 尤其是, 唯有于模块的最顶层所定义的函数才是能够被挑选出来的。这段代码:import multiprocessing as mp class Foo(): staticmethod def work(self): pass if __name__ __main__: pool mp.Pool() foo Foo() pool.apply_async(foo.work) pool.close() pool.join()_python multiprocessing_PicklingError in Python multiprocessing with nested functions/产生与您发布的错误几乎相同的错误:an error to the one you :Exception in thread Thread-2: Traceback (most recent call last): File /usr/lib/python2.7/threading.py, line 552, in __bootstrap_inner self.run() File /usr/lib/python2.7/threading.py, line 505, in run self.__target(*self.__args, **self.__kwargs) File /usr/lib/python2.7/multiprocessing/pool.py, line 315, in _handle_tasks put(task) PicklingError: Cant pickle : attribute lookup __builtin__.function failed问题在于, pool方法借助mp.把任务交付给工作进程。经由mp.的一切都必定是可挑选的, 然而foo.work是不可挑选的, 原因是它未在模块顶层进行定义。能够借助于在最顶上一层定义一个函数从而将其修复, 那个函数会去调用foo的work()方法。def work(foo): foo.work() pool.apply_async(work,args(foo,))留意, foo 这种情况是能够被挑选的, 鉴于 Foo 是于顶层进行定义的缘故, 并且 foo. 同样是能够被挑选的。那个foo之所以是这样, 是因为Foo处于顶级层面, 而foo.是这样的标点符号。关于“Cant”的这篇文章, 结束此次介绍啦。期望, 我们推荐出来的答案, 能给大家带去帮助。并且, 祝愿大家, 能够对html5模板网, 给予诸多支持~