2

我有这个使用多处理的简单地图示例。但即使这样我也无法正确运行。

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

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

4

1 回答 1

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]

显然,由于某种原因,这种类型的东西在解释器中不起作用。

于 2013-05-21T19:14:27.587 回答