我希望在父进程中更改对象属性后,在子进程中更新对象属性。如果我理解正确,那么在创建子进程时,将复制子进程对象,并且在主进程中更改属性不会影响子进程中的属性。这是我到目前为止的一个例子:
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
时也在子进程中更改它。是否可以将对象声明为全局,而不是Event
,ConditionVariable
或Variable
?例如:
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
...
答案 0 :(得分:1)
不,一旦子进程开始,它就无法从父内存中读取更新的数据。
您将不得不使用其他一些机制来共享数据
答案 1 :(得分:1)
使用Pipe是一种有效的进程间通信方法。