我试图调用一个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())
干杯,纳斯
没有通过Pyro传递实际的 "实例",传递的是远程对象(在你的例子中,p1)的代理信息。
然而由于默认的服务器并发模型是 "session",所以当你最终从其他Pyro对象中调用get_name()时,Pyro确实会创建一个Host1的新实例。没有办法以某种方式 "共享 "同一个连接。
然而,如果你不介意把它变成一个单人(instancemode "single"),你可以共享同一个对象。 请看 派洛文档 如何做到这一点。