I'm new to Pyro and pretty new to Python.
I have the following setup: 2 python scripts
Here is 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()
and this is 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()
As you noticed, in server.py
, in the requestloop
there is a loopCondition "listening" for packet.must_shutdown to change to True. I start server.py
and then client.py
. The Pyro Packet object in client.py
is obtained successfully.
The problem is that even though I call close_connection
method on the Pyro Packet object, thus setting must_shutdown
to "True", the requestLoop does not break and the server still listening for requests. I log in close_connection and it is called but the interesting thing is that self.some_attr
is still empty even thought it was set in client.py
. It is like, somehow, client deals with another instance of Packet object than the one instantiated in server. What I'm missing here?
Fixing the issues I mentioned int he comment will probably provide you with the answer.
Most notably; https://pyro4.readthedocs.io/en/stable/clientcode.html#accessing-remote-attributes where it says "you can access exposed attributes of your remote objects directly via the proxy." (emphasis added)