在父进程中更改属性时更新子进程中的对象属性

时间:2016-01-18 21:25:11

标签: python multithreading events multiprocessing

我希望在父进程中更改对象属性后,在子进程中更新对象属性。如果我理解正确,那么在创建子进程时,将复制子进程对象,并且在主进程中更改属性不会影响子进程中的属性。这是我到目前为止的一个例子:

class Sample(object):

    __init__(self, var_name):
        self.var_name = var_name
        # And many more, like IP, port etc, client_buffers.

    def run(self):

        self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.socket.bind((self.ip, self.port))  
        self.socket.listen(5)  

        self.listener = threading.Thread(target=self.acceptor)
        self.listener.start()

     def acceptor(self):

        while True:

              conn, address = self.socket.accept()
              buffer = multiprocessing.Queue()
              self.client_buffers.append(buffer)

              process = multiprocessing.Process(
                    target=self.hanlder, args=(conn, address, buffer))

              process.start()
              conn.close  

    def handler(self, conn, address, buffer):

        while True: 
            print("Child var: %d", var_name)
            conn.sendall(buffer.get())

我想在主进程中更改var_name时也在子进程中更改它。是否可以将对象声明为全局,而不是EventConditionVariableVariable?例如:

s = Sample(5)
s.run()
sleep(2)
s.var_name = 10
sleep(2)
print("Parent var: %d, s.var_name")
s.join()

输出看起来像:

Child var: 5
Child var: 5
Child var: 5
Parent var: 10
Child var: 5
Child var: 5
...

2 个答案:

答案 0 :(得分:1)

不,一旦子进程开始,它就无法从父内存中读取更新的数据。

您将不得不使用其他一些机制来共享数据

答案 1 :(得分:1)

使用Pipe是一种有效的进程间通信方法。