在进程s之后声明共享内存

2024-04-26 00:05:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望能够在进程启动后创建新的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

这里的问题是:shareddict在启动时被复制到process。但是,如果我在shareddict中添加一个键,进程将看不到它。这是如何开始的process可以被告知存在新的multiprocessing.Value('i', 24)?你知道吗

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

Synchronized objects should only be shared between processes through inheritance

你知道吗?你知道吗


Tags: keyinpyselfvaluelinebarjob