2017-08-28 6 views
0

プロセスの開始後に新しい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)の存在について知らせることができますか?それは思考パイプを与えることはできません

理由:

同期オブジェクトは任意のアイデア継承

てプロセス間で共有すべきですか?

答えて

0

shared変数に両方のスレッドがアクセス可能であると思われるようです。共有["foo"]変数だけが両方のスレッドからアクセス可能です。あなたは辞書を共有する必要があります。ここで

は一例です:Python multiprocessing: How do I share a dict among multiple processes?

+0

回答は正しいですが、私はパフォーマンスの問題を得た:manager.dict()は、仕事をするが、データは漬けされています。プロセスは新しいメモリ共有ブロックについての情報だけではありません。 – bux

関連する問題