首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用rpyc更新远程对象的属性

使用rpyc更新远程对象的属性
EN

Stack Overflow用户
提问于 2016-01-17 21:47:31
回答 1查看 724关注 0票数 2

我正在应用程序中使用rpyc,遇到了一个小问题。

我只想知道是否有可能更新远程属性?

我有一个测试服务器:

代码语言:javascript
复制
import rpyc
from rpyc.utils.server import ThreadedServer

class Test:
    def __init__(self):
        self._v = 0

    @property
    def V(self):
        return self._v

    @V.setter
    def V(self, value):
        self._v = value


class TestService(rpyc.Service):

    def exposed_Test(self):
        return Test()

if __name__ == '__main__':

    t = ThreadedServer(TestService, port = 2942,
                    protocol_config={"allow_all_attrs":True})
    t.start()

在ipython控制台中:

代码语言:javascript
复制
In [1]: import rpyc

In [2]: conn = rpyc.connect('localhost', 2942, config={'allow_all_attrs':True})

In [3]: test = conn.root.Test()

In [4]: test.V
Out[4]: 0

In [5]: test.V = 2
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-5-d3ae0dcd1075> in <module>()
----> 1 test.V = 2
<blah blah traceback>
AttributeError: cannot access 'V'

是否有可能更新远程属性?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-18 20:35:49

是的,默认情况下设置远程属性是被阻塞的,但如果设置allow_setattr=True,则允许设置远程属性。

(如果您正在设置allow_delattr=True,那么设置allow_setattr=True也是有意义的)

代码语言:javascript
复制
t = ThreadedServer(TestService, port = 2942,
                protocol_config={"allow_all_attrs":True,
                                 "allow_setattr": True,
                                 "allow_delattr": True,})

医生们

您还可以绕过setattr保护,直接访问远程对象的__dict__ (当然,第一个解决方案要好得多):

代码语言:javascript
复制
test.__dict__['V'] = 2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34844127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档