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

我正在尝试从另一个远程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())

干杯, / Nas

qq8023tt 回答:Pyro4:从远程pyro对象调用远程方法

没有通过Pyro传递实际的“实例”,传递的是到远程对象(在您的情况下为p1)的代理信息。

但是,由于默认的服务器并发模型是“会话”,因此当您最终从另一个Pyro对象中调用get_name()时,Pyro确实会创建Host1的新实例。无法以某种方式“共享”相同的连接。

但是,如果可以将其设为单例(实例模式为“ single”),则可以共享同一对象。请参阅the Pyro docs的操作方法。

本文链接:https://www.f2er.com/2636207.html

大家都在问