Python多处理,使用对象在进程之间共享数据

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

我试图使用一个名为“Memory”的泛型对象临时存储一个值,该值由一个名为“Writer\u process”的进程写入,由“Reader\u process”读取,但Reader只返回存储在“Memory”中的原始值

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绑定的读写器对。在这种情况下,最好使用异步执行而不是多处理。我很高兴您已经解决了您的问题。你现在可以接受自己的答案了。