計算を行い、計算の状態をresult
辞書に保存する関数があります(デフォルトのデフォルト引数)。最初に実行し、次にマルチプロセッシングモジュールを使用していくつかのプロセスを実行します。これらの各並列プロセスで関数を再度実行する必要がありますが、この関数を1回実行した後、キャッシュされた状態を返す必要があります。値を再計算しないでください。この要件は私の例では意味がありませんが、この制限を必要とする単純で現実的な議論を考えることはできません。変更可能なデフォルト引数としてdictを使用することは機能しますが、これはマルチプロセッシングモジュールでは機能しません。同じ効果を得るためにどのようなアプローチを使用できますか?
状態値は、引数afaikとして複数のプロセスに渡すことができないもの(クラス値を含むディクショナリ)であることに注意してください。
SOの質問Pythonマルチプロセッシング:複数のプロセス間でdictを共有するにはどうすればよいですか?同様の地面をカバーしているようです。おそらく、マネージャーを使用して必要なことを実行できますが、その方法は明らかではありません。あるいは、https://stackoverflow.com/a/4534956/350713に従って、値をグローバルオブジェクトに保存することもできますが、それはあまりエレガントではないようです。
def foo(result={}):
if result:
print "returning cached result"
return result
result[1] = 2
return result
def parafn():
from multiprocessing import Pool
pool = Pool(processes=2)
arglist = []
foo()
for i in range(4):
arglist.append({})
results = []
r = pool.map_async(foo, arglist, callback=results.append)
r.get()
r.wait()
pool.close()
pool.join()
return results
print parafn()
更新:コメントありがとうございます。私は今、以下に投稿された実用的な例を持っています。