Pyro4:从远程pyro对象中调用远程方法。

问题描述 投票:0回答:1

我试图调用一个Pyro对象方法 p1.get_name() 从另一个远程Pyro对象 p2. 该方法应该返回 p1 对象,但它什么也没返回(空字符串)。令人惊讶的是,我看到 p1 可从 p2 因为当我调用 p1.print_hello()但它是有效的。似乎传递的是一个新的实例而不是初始化的实例,我不知道是怎么回事。请看一下下面的代码,谢谢你的帮助!

下面这段代码创建了代理(为了便于阅读,我忽略了名称服务器和创建守护进程)。

def create_proxy(ns_host, thing_host):
    ns = Pyro4.locateNS(host=ns_host)
    uri = ns.lookup(thing_host) 
    return Pyro4.Proxy(uri)

p1 = create_proxy('localhost', 'host1')
p1.init()
p2 = create_proxy('localhost', 'host2')
p2.init(p1)

p1和p2对象的类定义如下。

Class Host1:
   def __init__(self)
      self.name = ''

   def init(sut):
      self.name = 'host 1'
   def get_name(self):
      return self.name

Class Host2:
   def init(p):
      print('Host name: ', p.get_name())

干杯,纳斯

remote-access pyro pyro4
1个回答
0
投票

没有通过Pyro传递实际的 "实例",传递的是远程对象(在你的例子中,p1)的代理信息。

然而由于默认的服务器并发模型是 "session",所以当你最终从其他Pyro对象中调用get_name()时,Pyro确实会创建一个Host1的新实例。没有办法以某种方式 "共享 "同一个连接。

然而,如果你不介意把它变成一个单人(instancemode "single"),你可以共享同一个对象。 请看 派洛文档 如何做到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.