Pyro4 RPC阻塞

时间:2015-06-04 10:15:10

标签: python asynchronous rpc python-multiprocessing

我目前正在开发一个高性能数值计算系统,将结果发布到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()

0 个答案:

没有答案