マルチプロセッシングを実装してレプリケーション ループを高速化しようとしていますが、Python27 で動作させることができません。これは私のプログラムの非常に単純化されたバージョンであり、SO のドキュメントとその他の回答に基づいています (複数の引数に対する Python multiprocessing pool.map など)。マルチプロセッシングに関して多くの質問があることは認識していますが、これまでのところ、この問題を解決できていません。あまりにも些細なことを見落としていないことを願っています。
コード
import itertools
from multiprocessing import Pool
def func(g, h, i):
return g + h + i
def helper(args):
args2 = args[0] + (args[1],)
return func(*args2)
pool = Pool(processes=4)
result = pool.map(helper, itertools.izip(itertools.repeat((2, 3)), range(20)))
print result
これは を使用している場合は機能しますが、 を使用している場合は機能しmap(...)
ませんpool.map(...)
。
エラーメッセージ:
Process PoolWorker-3:
Traceback (most recent call last):
File "C:\Program_\EPD_python27\lib\multiprocessing\process.py", line 258, in _
bootstrap
self.run()
File "C:\Program_\EPD_python27\lib\multiprocessing\process.py", line 114, in run
self._target(*self._args, **self._kwargs)
File "C:\Program_\EPD_python27\lib\multiprocessing\pool.py", line 85, in worker
task = get()
File "C:\Program_\EPD_python27\lib\multiprocessing\queues.py", line 376, in get
return recv()
AttributeError: 'module' object has no attribute 'helper'