マルチプロセッシングモジュールを使用しているときに、共有変数(名前空間のnumpy配列)を更新しようとしています。しかし、変数は更新されていませんし、理由を理解できません。ここでマルチプロセッシング共有変数が更新されない
はこれを説明するためのサンプルコードです:
from multiprocessing import Process, Manager
import numpy as np
chunk_size = 15
arr_length = 1000
jobs = []
namespace = Manager().Namespace()
namespace.arr = np.zeros(arr_length)
nb_chunk = arr_length/chunk_size + 1
def foo(i, ns):
from_idx = chunk_size*i
to_idx = min(arr_length, chunk_size*(i+1))
ns.arr[from_idx:to_idx] = np.random.randint(0, 100, to_idx-from_idx)
for i in np.arange(nb_chunk):
p = Process(target=foo, args=(i, namespace))
p.start()
jobs.append(p)
for i in np.arange(nb_chunk):
jobs[i].join()
print namespace.arr[:10]
[OK]を、私はどのように取ることができます各プロセスで、私は配列の同じメモリ空間にアクセスしないという利点がありますか? – GuillaumeA
あなたの現在のコードに似ていますが、関数の引数(あなたの場合は 'foo()')に渡してください。 [複数の非同期関数を実行し、各関数の戻り値を取得する]を参照することもできます(http://stackoverflow.com/questions/40536287/running-multiple-asynchronous-function-and-get-the-returned-value-of- each-functi)、私が過去に尋ねた質問。 'Queue'の使い方に答えています –