我有这个使用多处理映射的简单例子。但即使如此,我也无法正确运行。多处理映射引发异常
import multiprocessing
p = multiprocessing.Pool()
rere = range(50)
print p.map(lambda x: x+1, rere)
它将打印此异常:
Exception in thread Thread-3:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 808, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 761, in run
self.__target(*self.__args, **self.__kwargs)
File "/usr/lib/python2.7/multiprocessing/pool.py", line 342, in _handle_tasks
put(task)
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
并且不能使用Ctrl + C终止。
我应该如何解决我的例子,使其工作?
是啊,我跳枪对不起。它与multiprocessing.pool.map的工作方式有关,“lambda x:x + 1”部分必须是pickleable,而不是函数,我们都需要更多的实验! – TehTris
http://stackoverflow.com/questions/8804830/python-multiprocessing-pickling-error?rq=1检查一下,它几乎完全相同 – TehTris
声明函数为模块中的顶层我得到这个: AttributeError: 'module'对象没有属性'f'(当然我的函数被称为f,并声称它不存在是由于某种原因)。 – LtWorf