以下是我测试此问题的示例代码。 执行时只是在调用testmaster.test()时永远停留,这是服务器远程对象的一种方法(实际上不确定它是服务器还是客户端)。
即使@ Pyro4.callback也没有帮助(不确定这里是否合乎逻辑) 我使用的是Python 2.7.12和Pyro4 如何解决这个问题,任何帮助将不胜感激
#Run python -m Pyro4.naming in another terminal first:
import Pyro4
@Pyro4.expose
@Pyro4.callback
class Master:
@Pyro4.expose
@Pyro4.callback
def test(self):
print "this is test"
nameserver = Pyro4.locateNS('localhost', 9090)
deamon = Pyro4.Daemon()
uri = deamon.register(Master())
nameserver.register("Master", uri, safe=True)
testmaster=Pyro4.Proxy(uri)#Object of master to call some functions from it
print "before calling test" #this will be executed
testmaster.test()
print "after calling test" #but not this, it just stuck forever- how can I make it to be executed
deamon.requestLoop()
答案 0 :(得分:0)
您必须在单独的进程中运行守护程序。那就是Pyro的意思是:在其他进程中调用方法!
在与其余代码相同的过程中运行它是没有意义的:为什么你会使用Pyro呢?您不是在不同的进程或计算机上分发对象。
您的代码“挂起”的原因是testmaster.test()
调用正在尝试连接到Pyro守护程序,但尚未在任何地方运行。所以它会挂起(直到套接字超时)。永远不会达到daemon.requestLoop()
- 但即使是这样,代码也是错误的:运行守护进程并在同一程序中通过Pyro调用对象没什么意义。
我建议阅读手册中的介绍,至少要掌握基础知识:http://pythonhosted.org/Pyro4/intro.html#simple-example