多处理映射引发异常

时间:2013-05-21 15:55:52

标签: python python-2.7 map multiprocessing

我有一个使用多处理的地图的简单示例。但即便如此,我也无法正常运行。

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终止。

我应该如何修复我的示例才能使其正常工作?

1 个答案:

答案 0 :(得分:1)

从我对多处理奇怪世界的研究中确定......

你尝试这样做的方式还不够。以下是我如何设法将其拉下来。

import multiprocessing as mp
import time

def theGenerator():
    for number in xrange(10):
        yield number

def processNumber(x):
    return x*2

def multiprocessThings():
    pool = mp.Pool()
    gen = theGenerator()
    result = pool.map(processNumber, gen)
    print result

if __name__ == "__main__":
    multiprocessThings()
    time.sleep(10)

将其保存在任何地方,然后双击它。

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

显然,出于某种原因,这种类型的东西在翻译中不起作用。