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 に答える