PyRo和python

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

我在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.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),结果不会改变。但请求已完成…嗯。那我就输了,我从来没用过烟火,我的答案只是一个有根据的猜测。