进程之间的通信Python



我正试图找出一个进程告诉另一个进程某些值已经更改的解决方案。

import multiprocessing
import time
class Consumer(multiprocessing.Process):
def __init__(self, share):
super().__init__()
self.share = share

def run(self):
print (self.share)
self.share = "xxx"

share = "ssss"
A = Consumer(share)
B = Consumer(share)
if __name__ == '__main__':
A = Consumer(share)
A.start()
time.sleep(5)
B = Consumer(share)
B.start()

期望具有";xxx";以在B运行时打印。但是得到了";ssss";作为初始值。

经过一些研究,可以使用multiprocess.manager包来实现它。但由于速度的问题,即100个进程,访问共享值的频率很高,锁会成为一个瓶颈。

有没有办法在改变值但读取时锁定对象??

使用manager在进程之间共享对象:

import multiprocessing
import time
class Consumer(multiprocessing.Process):
def __init__(self, manager_namespace):
super().__init__()
self.share = manager_namespace
def run(self):
print (self.share.myString)
self.share.myString = "xxx"

if __name__ == '__main__':
manager = multiprocessing.Manager()
namespace = manager.Namespace()
namespace.myString = 'sss'
B = Consumer(namespace)
A = Consumer(namespace)
A.start()
time.sleep(5)
B = Consumer(namespace)
B.start()

至少在我的系统中,它提供了所需的输出。