のための並列化機能を作成するには:次のエラーPythonのマルチプロセッシング - どのようにあなたがJupyterノートブックを開いて、これを実行するとループ
Process ForkPoolWorker-1:
Traceback (most recent call last):
File "/Users/me/anaconda3/lib/python3.5/multiprocessing/process.py", line 249, in _bootstrap
self.run()
File "/Users/me/anaconda3/lib/python3.5/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
File "/Users/me/anaconda3/lib/python3.5/multiprocessing/pool.py", line 108, in worker
task = get()
File "/Users/me/anaconda3/lib/python3.5/multiprocessing/queues.py", line 345, in get
return ForkingPickler.loads(res)
AttributeError: Can't get attribute 'g' on <module '__main__'>
とIよを取得します
import multiprocessing
def f(x):
a = 3 * x
pool = multiprocessing.Pool(processes=1)
global g
def g(j):
return a * j
return pool.map(g, range(5))
f(1)
これがバグか機能かどうかを理解しようとしています。
私の実際のケースでは、f
は基本的にforループを簡単に並列化できます(各繰り返しで1つのパラメータを変更するだけです)が、これはうまくいくようにしようとしていますが、それは各繰り返しで多くの時間がかかります!問題に正しく近づいているのですか、それとも簡単な方法がありますか? (注:ノートブックfはさまざまなパラメータで何回か呼び出されます)
しかし、問題は、 'g'は' f'の本体で計算される変数値を使用するため、外部では定義できないということです。この状況を反映した私の編集された質問を参照してください – gota
この場合、私はこれが助けになると信じています http://stackoverflow.com/questions/4827432/how-to-let-pool-map-take-a-lambda-function –
私それを取得しないでください!これがバグか機能なのかどうか分かりません。 – gota