0
我有一个名为multiprocessing.Process其Sim
有以下运行方法:从threading.Thread配置multiprocessing.Process
def run():
self.servers = [TcpServer(p, resps[p].get) for p in ports]
for s in self.servers: s.start()
self.event.wait()
for s in self.servers: s.stop()
TcpServer
继承。
resps
是每个港口响应者的字典。应答器的get方法的一个例子如下:
def get(data):
rsp = MyRsp()
rsp.a = 1
rsp.b = 1
rsp.c = 1
rsp.d = 1 if data[0] == 1 else 2
return rsp
我希望做的是当Sim
进程运行时改变一个响应者的行为,我想从主过程做到这一点。例如,我可能想更改上述响应者,以便改为。
注意,响应者也可以有状态:
class Rsp(object):
def __init__(self):
self.state = None
def get(data):
if data[0] = "update":
self.state = data[1]
return "updated"
else:
assert data[0] == "get"
return self.state
我会如何解决这个问题?我唯一的想法是在我的Sim
进程中运行一个附加线程,该进程从多处理.Queue读取。然后主进程可以添加给定端口的数据,线程可以使用它来更新响应者。我在正确的轨道上吗?我不得不在自己的过程中实施我的网络。
我对网络部分并不熟悉,但是如果你需要改变的变量有一个固定的类型,你可以把它们放在'multiprocessing.Array'中,这是一个共享变量。您还应该使用内置的Lock来访问它。如果你认为这可能有效,我可以开发这个想法 – CoMartel
@HarryPotfleur是的,我希望看到你发展你的想法,请! – Baz