提问人:xc wang 提问时间:11/20/2020 最后编辑:Jonathan Lefflerxc wang 更新时间:11/20/2020 访问量:485
在父进程中,如何查看由子进程管理的子变量?
In a parent process, how to see child variables that are managed by child processes?
问:
我定义了一个类 Node,它定义了一个侦听器服务来不断通信和更新局部变量。侦听器使用多处理启动。该类如下所示:
# 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
这样,节点 a 与节点 b 通信并更新其变量,节点 b 也是如此。
现在我遇到了一个问题:本地打印机可以正确输出更新的变量值,但全局打印机不能。实际上,全局打印机始终输出不变的值(x1、x2,与初始值相同)。
代码有什么问题 或者如何查看子进程变量?
答:
1赞
Guillem
11/20/2020
#1
除非您使用任何机制与父母沟通,否则您将无法做到这一点。我建议你使用管理器字典。
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
***********
....
评论