gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 17:03:12 30 4
gpt4 key购买 nike

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

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

我有一个测试服务器:

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 控制台中:

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'

是否可以更新远程属性?

最佳答案

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

(如果您无论如何都设置 allow_setattr=True,则设置 allow_delattr=True 也有意义)

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

参见the docs .

<小时/>

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

test.__dict__['V'] = 2

关于python - 使用 rpyc 更新远程对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34844127/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com