进程启动后声明共享内存



我希望能够在进程启动后创建新的multiprocessing.Valuemultiprocessing.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字典中添加一个键,进程就看不到它。这是如何开始的process可以被告知新multiprocessing.Value('i', 24)的存在?

不能给它思考管道,因为:

同步的对象只能通过继承在进程之间共享

知道吗?

看起来您假设两个线程都可以访问shared变量。 只有共享["foo"]变量可以被两个线程访问。 您需要共享字典。

下面是一个例子:Python 多处理:如何在多个进程之间共享字典?

相关内容

  • 没有找到相关文章

最新更新