プロセスの開始後に新しいmultiprocessing.Value
またはmultiprocessing.Array
を作成したいと思います。この例のように:プロセスの開始後に共有メモリを宣言
# coding: utf-8
import multiprocessing
shared = {
'foo': multiprocessing.Value('i', 42),
}
def job(pipe):
while True:
shared_key = pipe.recv()
print(shared[shared_key].value)
process_read_pipe, process_write_pipe = multiprocessing.Pipe(duplex=False)
process = multiprocessing.Process(
target=job,
args=(process_read_pipe,)
)
process.start()
process_write_pipe.send('foo')
shared['bar'] = multiprocessing.Value('i', 24)
process_write_pipe.send('bar')
出力リレー:
42
Process Process-1:
Traceback (most recent call last):
File "/usr/lib/python3.5/multiprocessing/process.py", line 249, in _bootstrap
self.run()
File "/usr/lib/python3.5/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
File "/home/bux/Projets/synergine2/p.py", line 12, in job
print(shared[shared_key].value)
KeyError: 'bar'
Process finished with exit code 0
ここで問題がある:それはスタートだときshared
辞書はprocess
にコピーされます。しかし、shared
dictにキーを追加すると、プロセスはそれを見ることができません。これがどのように始まったのですかprocess
は新しいmultiprocessing.Value('i', 24)
の存在について知らせることができますか?それは思考パイプを与えることはできません
理由:
同期オブジェクトは任意のアイデア継承
てプロセス間で共有すべきですか?
回答は正しいですが、私はパフォーマンスの問題を得た:manager.dict()は、仕事をするが、データは漬けされています。プロセスは新しいメモリ共有ブロックについての情報だけではありません。 – bux