在父进程中,如何查看子进程管理的子变量?
In a parent process, how to see child variables that are managed by child processes?
我定义了一个class节点,它定义了一个监听器服务来不断地通信和更新局部变量。侦听器使用多处理启动。 class 看起来像:
# Pseudo-code
import multiprocessing
class Node(object):
def __init__(self, x):
self.variables = x
def listener(self):
while(True):
COMMUNICATE WITH OTHERS # Pseudo-code
UPDATE self.variable # Pseudo-code
print(self.variable) # local printer
def run(self):
p = multiprocessing.Process(target=self.listener)
p.start()
在主进程中,我创建了两个节点a = Node(x1), b = Node(x2),并让它们运行
if __name__ == "__main__":
x1 = 1 # for example
x2 = 1000 # for example
a = Node(x1)
b = Node(x2)
a.run()
b.run()
while(True):
print(a.variable) # global printer
print(b.variable) # global printer
这样,Node-a与Node-b通信并更新其变量,Node-b也是如此。
现在我遇到一个问题:本地打印机正确输出更新的变量值,但全局打印机不正确。实际上,全局打印机总是输出不变的值(x1,x2,与初始相同)。
代码有什么问题或者如何查看子进程变量?
除非您使用任何机制与 parent 通信,否则您将无法做到这一点。我推荐你使用 Manager dicts。
import random
import time
import multiprocessing as mp
class Child(mp.Process):
def __init__(self, shared_variables):
super(Child, self).__init__()
self.shared_variables = shared_variables
def run(self):
for _ in range(5): # Change shared variable value 5 times
self.shared_variables['var'] = random.randint(0, 10)
self.shared_variables['var1'] = random.randint(0, 10)
time.sleep(3)
if __name__ == "__main__":
shared_variables = mp.Manager().dict()
child = Child(shared_variables)
child.start()
while True:
print('Form parent')
for k, v in shared_variables.items():
print(f'-> {k}: {v}')
print('***********')
time.sleep(3)
输出将如下所示:
Form parent
-> var: 8
-> var1: 6
***********
Form parent
-> var: 7
-> var1: 7
***********
....
我定义了一个class节点,它定义了一个监听器服务来不断地通信和更新局部变量。侦听器使用多处理启动。 class 看起来像:
# Pseudo-code
import multiprocessing
class Node(object):
def __init__(self, x):
self.variables = x
def listener(self):
while(True):
COMMUNICATE WITH OTHERS # Pseudo-code
UPDATE self.variable # Pseudo-code
print(self.variable) # local printer
def run(self):
p = multiprocessing.Process(target=self.listener)
p.start()
在主进程中,我创建了两个节点a = Node(x1), b = Node(x2),并让它们运行
if __name__ == "__main__":
x1 = 1 # for example
x2 = 1000 # for example
a = Node(x1)
b = Node(x2)
a.run()
b.run()
while(True):
print(a.variable) # global printer
print(b.variable) # global printer
这样,Node-a与Node-b通信并更新其变量,Node-b也是如此。
现在我遇到一个问题:本地打印机正确输出更新的变量值,但全局打印机不正确。实际上,全局打印机总是输出不变的值(x1,x2,与初始相同)。
代码有什么问题或者如何查看子进程变量?
除非您使用任何机制与 parent 通信,否则您将无法做到这一点。我推荐你使用 Manager dicts。
import random
import time
import multiprocessing as mp
class Child(mp.Process):
def __init__(self, shared_variables):
super(Child, self).__init__()
self.shared_variables = shared_variables
def run(self):
for _ in range(5): # Change shared variable value 5 times
self.shared_variables['var'] = random.randint(0, 10)
self.shared_variables['var1'] = random.randint(0, 10)
time.sleep(3)
if __name__ == "__main__":
shared_variables = mp.Manager().dict()
child = Child(shared_variables)
child.start()
while True:
print('Form parent')
for k, v in shared_variables.items():
print(f'-> {k}: {v}')
print('***********')
time.sleep(3)
输出将如下所示:
Form parent
-> var: 8
-> var1: 6
***********
Form parent
-> var: 7
-> var1: 7
***********
....