conn inside returnObject() is getting garbage cleaned-up.

With that the getattr() referred module and the returned function
become unavailable.



On 2/3/12, Adhithya <[email protected]> wrote:
> I have implemented a rpyc sharing server which has an initialized
> class object and clients will access this shared object. I am able to
> access this object if i connect directly but if i use function for
> connecting to server and return the object i am getting error. Below
> is the code
>
> **Server**
> ===========
> import rpyc
>
> class SharedClass(object):
>     def __init__(self,string):
>         print string
>
>     def action(self):
>         print 'i am doing something'
>
>
> s=SharedClass('hi')
>
> class MyService(rpyc.Service):
>
>     def on_connect(self):
>         pass
>
>     def on_disconnect(self):
>         pass
>
>     def exposed_get_shared(self): # this is an exposed method
>         return s
>
> if __name__=='__main__':
>     from rpyc.utils.server import ThreadedServer
>
> t=ThreadedServer(MyService,port=18861,protocol_config={"allow_public_attrs":True})
>     t.start()
>
> At the client side if i try to connect directly it is working, whereas
> when i try to make connection inside a function and return the object
> i am getting an error
>
> **Client**
> **Direct connection**
> #python
> """
>>>>Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]
>>>> on win32
>>>>Type "help", "copyright", "credits" or "license" for more information.
>>>>conn=rpyc.connect('localhost',18861)
>>>>share=getattr(conn.root,'get_shared')
>>>>share
> <bound method MyService.exposed_get_shared of <__main__.MyService
> object at 0x011BA698>>
>>>>share=getattr(conn.root,'get_shared')()
>>>>share
> <__main__.SharedClass object at 0x00B6ED30>
>>>>share.action()
> i am doing something
> """
> **Using a function**
> If i try to do it in a function, i am getting an error ;(
>>>>def returnObject(objName, host, port):
> ...    conn = rpyc.connect(host, port)
> ...    print conn
> ...    attr = getattr(conn.root, 'get_' + objName)()
> ...    print attr
> ...    return attr
>
>>>>share=returnObject('shared','localhost',18861)
> <rpyc.core.protocol.Connection 'conn2' object at 0x0108AAD0>
> <__main__.SharedClass object at 0x00B6ED30>
>>>>share
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>   File "C:\Python27\lib\site-packages\rpyc\core\netref.py", line 168,
> in __repr__
>     return syncreq(self, consts.HANDLE_REPR)
>   File "C:\Python27\lib\site-packages\rpyc\core\netref.py", line 69,
> in syncreq
>     return conn().sync_request(handler, oid, *args)
> AttributeError: 'NoneType' object has no attribute 'sync_request'

Reply via email to