我正在尝试从另一个远程Pyro对象p2调用Pyro对象方法p1.get_name()。该方法应该返回p1对象的名称,但没有返回任何内容(空字符串)。令人惊讶的是,我发现可以从p2访问p1,因为当我调用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
发布于 2020-05-11 23:06:05
通过Pyro传递的不是真正的“实例”,传递的是远程对象的代理信息(在本例中是p1)。
然而,由于默认的服务器并发模型是"session",当您最终从另一个Pyro对象中调用get_name()时,Pyro确实会创建一个新的Host1实例。没有办法以某种方式“分享”相同的连接。
但是,如果您不介意将其设置为单例(instancemode "single"),则可以共享相同的对象。请参阅the Pyro docs如何做到这一点。
https://stackoverflow.com/questions/60712441
复制相似问题