我是 Pyro 的新手,对 Python 还是很陌生。
我有以下设置:2个python脚本
这是server.py:
import os
import sys
import Pyro4
class Packet(object):
must_shutdown = False
def __init__(self):
self.some_attr = ""
def close_connection(self):
self.must_shutdown=True
def main():
try:
daemon = Pyro4.Daemon(host="localhost", port=65432)
packet = Packet()
uri = daemon.register(packet, "my.packet")
print "Ready. Object uri =", uri
daemon.requestLoop(loopCondition=lambda: not packet.must_shutdown)
print "after loop"
except Exception, e:
print "Exception" + str(e)
finally:
print "Finally"
if __name__ == '__main__':
main()
这是client.py:
import os
import sys
import Pyro4
def main():
try:
packet = Pyro4.Proxy("PYRO:my.packet@localhost:65432")
packet.some_attr = "this is client"
packet.close_connection()
print "client exiting"
except Exception, e:
print "Exception: " + str(e)
finally:
print "Finnally"
if __name__ == '__main__':
main()
正如您所注意到的,在server.py
中,requestloop
有一个loopCondition “正在侦听” packet.must_shutdown以更改为 True。我开始server.py
然后client.py
。成功获取其中的Pyro Packet对象client.py
。问题是,即使我close_connection
在 Pyro Packet 对象上调用方法,因此设置must_shutdown
为“True”,requestLoop 不会中断,服务器仍在侦听请求。我登录 close_connection并调用它,但有趣的是它self.some_attr
仍然是空的,即使它被设置了client.py
. 这就像,不知何故,客户端处理 Packet 对象的另一个实例,而不是在服务器中实例化的实例。我在这里缺少什么?