【发布时间】:2012-02-06 22:57:21
【问题描述】:
很抱歉,我无法用更简单的示例重现错误,而且我的代码太复杂而无法发布。如果我在 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
我将不胜感激。
更新:我pickle的函数定义在模块的顶层。虽然它调用了一个包含嵌套函数的函数。即f()调用g()调用h(),它有一个嵌套函数i(),我正在调用pool.apply_async(f)。 f()、g()、h() 都是在顶层定义的。我用这种模式尝试了更简单的例子,但它确实有效。
【问题讨论】:
-
顶级/接受的答案很好,但这可能意味着您需要重新构建代码,这可能会很痛苦。我建议任何有此问题的人也阅读使用
dill和pathos的附加答案。但是,在使用 vtkobjects 时,我对任何解决方案都不满意 :( 任何人都设法在并行处理 vtkPolyData 时运行 python 代码?
标签: python multiprocessing pickle python-multiprocessing