Python多处理,使用对象在进程之间共享数据
我试图使用一个名为“Memory”的泛型对象临时存储一个值,该值由一个名为“Writer\u process”的进程写入,由“Reader\u process”读取,但Reader只返回存储在“Memory”中的原始值Python多处理,使用对象在进程之间共享数据,python,multiprocessing,Python,Multiprocessing,我试图使用一个名为“Memory”的泛型对象临时存储一个值,该值由一个名为“Writer\u process”的进程写入,由“Reader\u process”读取,但Reader只返回存储在“Memory”中的原始值 import multiprocessing import time class Writer_process(multiprocessing.Process): def __init__(self, val, memory): super().__in
import multiprocessing
import time
class Writer_process(multiprocessing.Process):
def __init__(self, val, memory):
super().__init__()
self.val = val
self.memory = memory
def run(self):
cont = 0
while True:
cont += self.val
self.memory.num = cont
time.sleep(1)
class Reader_process(multiprocessing.Process):
def __init__(self, val, memory):
super().__init__()
self.val = val
self.memory = memory
def run(self):
while True:
print(self.memory.num)
time.sleep(self.val)
class Memory():
num = 0
if __name__ == '__main__':
memory = Memory()
writer = Writer_process(1, memory)
reader = Reader_process(1, memory)
writer.start()
reader.start()
感谢您,我使用“管理器”来管理对内存的访问,并使用一个名为“值”的特定多处理对象来存储单个数据并在不同进程之间共享它,从而解决了这个问题
import multiprocessing
import time
class Writer_process(multiprocessing.Process):
def __init__(self, val, memory):
super().__init__()
self.val = val
self.memory = memory
def run(self):
cont = 0
while True:
cont += 1
self.memory.value = cont
time.sleep(self.val)
class Reader_process(multiprocessing.Process):
def __init__(self, val, memory):
super().__init__()
self.val = val
self.memory = memory
def run(self):
while True:
self.datum = self.memory.value
print(self.datum)
time.sleep(self.val)
if __name__ == '__main__':
with multiprocessing.Manager() as manager:
memory = manager.Value('i', 0)
writer = Writer_process(1, memory)
reader = Reader_process(1, memory)
writer.start()
reader.start()
writer.join()
reader.join()
如果在多处理中需要真正的共享可变状态,则必须使用。不过,在多处理中最好避免共享可变状态。顺便说一下,根据对象的名称判断,您需要的是IO绑定的读写器对。在这种情况下,最好使用异步执行而不是多处理。我很高兴您已经解决了您的问题。你现在可以接受自己的答案了。