PyRo和python
我在python程序中使用PyRo。我有个问题。B类:在callFromProxy打印中为0,但在callfun打印中为右值=10。为什么?如何修复PyRo和python,python,pyro,Python,Pyro,我在python程序中使用PyRo。我有个问题。B类:在callFromProxy打印中为0,但在callfun打印中为右值=10。为什么?如何修复 class A(Pyro.core.ObjBase): # set link to item class B def set(self, real_B): self.item_B = real_B # call function callfun in item_B def callfun(self): self.item_B.ca
class A(Pyro.core.ObjBase):
# set link to item class B
def set(self, real_B):
self.item_B = real_B
# call function callfun in item_B
def callfun(self):
self.item_B.callfun(10)
class B(Pyro.core.ObjBase):
# init class B
def __init__(self):
self.elements = {"name":0}
# set proxy to item class A
def set(self, proxyA):
self.proxyA = proxyA
# print
def printvalue(self):
print self.elements["name"]
# call from proxy
def callFromProxy(self):
self.proxyA.callfun()
self.printvalue() # this is not print 10, print 0
# call function
def callfun(self, value):
self.elements["name"] = value
self.printvalue() # but this is print 10
itemA = A()
# proxyA connect from PyRo to itemA
itemB = B()
itemB.set(itemA)
itemA.set(itemB)
itemB.callFromProxy() # this is not print 10
我相信(如果我错了,请纠正我)PyRo至少在默认情况下使用异步调用
因此,当您调用
callFromProxy
时,printvalue
可能在itemB
上的callfun
之前执行,因为调用A.callfun
和B.callfun
需要时间。如果发生这种情况,elements[“name”]
在第一次调用printvalue
时仍将为0。我修复了一些我认为是您代码中的拼写错误的行。我刚刚使用最新的Pyro版本测试了上面的代码,它与我预期的一样工作-它打印了10次。如果我理解你的帖子,这就是你想要的。我完全不知道你想在这里做什么,但如果我理解正确的话-你将itemA设置为代理对象,itemB保持不变,也就是说,它是类B的常规实例,对吗?如果是的话,那么代码中发生的事情就是,基本上你复制了itemB引用的一个对象,将其发送到服务器,在服务器上修改它,然后打印出另一个对象的状态,它最初是在客户端创建的,并且没有更改。如果我在B.callFromProxy()中的printvalue()之前添加time.sleep(5),结果不会改变。但请求已完成…嗯。那我就输了,我从来没用过烟火,我的答案只是一个有根据的猜测。