我目前正在开发一个高性能数值计算系统,将结果发布到Web服务器。我们在一个单独的进程中使用flask来提供网页以保持所有交互,并使用websockets将数据发送到JS绘图仪。出于性能原因,计算也使用多处理进行拆分。
我们目前正在使用Pyro4从服务器获取计算中更新的参数。但是,如果我们的Pyro4设置对象上的每秒更新次数变高,则它会开始阻塞,并且在重新启动服务器之前无法更新任何参数。代理调用是在异步websocket回调中进行的。
我们目前没有得到任何追溯,也没有例外,这使得调试这一切都很棘手。在这种情况下,还有其他人对Pyro有很多经验吗?
Pyro守护程序初始化代码:
Pyro4.config.SERVERTYPE = "multiplex"
daemon = Pyro4.Daemon()
ns = Pyro4.locateNS()
settings = cg.Settings(web_opt, src_opt, rec_opt, det_opt)
uri = daemon.register(settings)
ns.register("cg.settings", uri)
daemon.requestLoop()
设置类:
class Settings(object):
def __init__(self, web_opt, src_opt, rec_opt, det_opt):
self.pipes = [web_opt, src_opt, rec_opt, det_opt]
def update(self, update):
[pipe.send(update) for pipe in self.pipes]
代理电话:
def onMessage(self, payload, isBinary):
data = json.loads(payload)
self.factory.content.set_by_uuid(data['id'], data['value'], self.client_address)
settings = Pyro4.Proxy("PYRONAME:cg.settings")
values = self.factory.content.values
settings.update(values)
settings._pyroRelease()