首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pyro4:从远程pyro对象调用远程方法

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

Stack Overflow用户
提问于 2020-03-17 03:55:58
回答 1查看 53关注 0票数 0

我正在尝试从另一个远程Pyro对象p2调用Pyro对象方法p1.get_name()。该方法应该返回p1对象的名称,但没有返回任何内容(空字符串)。令人惊讶的是,我发现可以从p2访问p1,因为当我调用p1.print_hello()时,它可以正常工作。似乎是传递了一个新的实例,而不是初始化的实例,我不确定发生了什么。请看下面的代码,谢谢你的帮助!

下面的代码创建代理(为了可读性,我忽略了名称服务器并创建了守护进程):

代码语言:javascript
复制
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对象的类定义如下所示:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2020-05-11 23:06:05

通过Pyro传递的不是真正的“实例”,传递的是远程对象的代理信息(在本例中是p1)。

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

但是,如果您不介意将其设置为单例(instancemode "single"),则可以共享相同的对象。请参阅the Pyro docs如何做到这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60712441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档