0
共有メモリ用の配列を使用します。問題は、プログラムが共有配列のサイズを知る前に子プロセスが生成されるように構造化されていることです。配列を拡張するメッセージを送信した場合、何も起こりません。共有配列自体を送信しようとすると、エラーが発生します。以下は私の問題を示す小さなスクリプトです。Pythonで共有メモリのサイズを変更するには
import multiprocessing as mp
import numpy as np
def f(a,pipe):
while True:
message, data = pipe.recv()
if message == 'extend':
a = np.zeros(data)
print a
elif message == 'exit':
break
if __name__ == '__main__':
unshared_arr = np.zeros(1)
a = mp.Array('d', unshared_arr)
p1,p2 = mp.Pipe()
p = mp.Process(target=f, args=(a,p2))
p.start()
p1.send(('extend', 10))
p1.send(('exit', None))
p.join()
b = np.frombuffer(a.get_obj())
'a = np.zeros(data)'は、同じプロセス内であっても、関数呼び出しの外では何の効果もありません。 – jfs
真実ですが、 'a'をグローバル変数として宣言しようとしましたが、プロセスの入力引数と' f'の入力引数として使用するのではなく、まだ動作させることができません。 – Chicony