Je voudrais être en mesure de créer un nouveau multiprocessing.Value
ou multiprocessing.Array
après le début du processus. Comme dans cet exemple:Déclarer la mémoire partagée après le début du processus
# 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')
Ouput:
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
Le problème est ici: shared
dict est copié dans process
quand il commence. Mais, si j'ajoute une clé dans shared
dict, le processus ne peut pas le voir. Comment cela a commencé process
peut être informé de l'existence de nouveaux multiprocessing.Value('i', 24)
?
Il ne peut être donné la pensée conduite parce que:
objets Synchronisé ne devraient être partagés entre les processus par héritage
Toute idée?
réponse est correcte mais je me suis problème de performance: manager.dict() faire le travail, mais les données sont décapés. Les processus ne sont pas seulement informés des nouveaux blocs partagés de mémoire. – bux