我有一个导入特定模块的 RpyC 服务器,应该公开这个模块内的一个类,以便可以从客户端继承这个类。
出于测试目的,我删除了模块导入/公开,并在我的 RPyC 服务中创建了一个名为暴露_TestClass 的简单类。
服务器端:rpyc_server.py
import rpyc
from rpyc.utils.server import ThreadedServer
class MyService(rpyc.Service):
class exposed_TestClass:
def exposed_Exec(self):
print("original print of class")
t = ThreadedServer(MyService, port=12345)
t.start()
客户端:python3 shell
>>> import rpyc
>>> conn = rpyc.connect("localhost", 12345)
>>> conn.root.TestClass
<class 'exposed_TestClass'>
>>> conn.root.TestClass()
<exposed_TestClass object at 0x7f2dda642588>
>>> #calling the Exec function also works, prints at server side
>>> conn.root.TestClass().Exec()
>>>
>>>
>>> # test inheriting class
>>> class MyClass(conn.root.TestClass):
... def NewMethod(self):
... print("printing from new method")
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3/dist-packages/rpyc/core/netref.py", line 220, in method
return syncreq(_self, consts.HANDLE_CALLATTR, name, args, kwargs)
File "/usr/lib/python3/dist-packages/rpyc/core/netref.py", line 74, in syncreq
conn = object.__getattribute__(proxy, "____conn__")
AttributeError: 'str' object has no attribute '____conn__'