PyRo и Python - PullRequest
       29

PyRo и Python

0 голосов
/ 14 февраля 2010

Я использую PyRo в моей программе на Python. И у меня есть проблема. класс 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

1 Ответ

1 голос
/ 14 февраля 2010

Я верю (и поправьте меня, если я ошибаюсь) PyRo использует асинхронные вызовы, по крайней мере по умолчанию.

Таким образом, когда вы вызываете callFromProxy, printvalue может выполняться до callfun на itemB, потому что для вызова A.callfun и B.callfun требуется время. Если / когда это произойдет, elements["name"] все равно будет 0, когда printvalue вызывается впервые.

...