问题标签 [rpyc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
271 浏览

python - 从 RPyC 服务公开方法按值返回对象(不是 Netref)

我正在使用 RPyC 服务在远程机器上进行一些计算,然后想要返回结果,这是一个 numpy 数组给用户 - rpyc 客户端。service 方法的返回值是 Netref 到一个 numpy 数组,因此,当它返回给客户端时,他不能对返回的数组使用 np.mean(return_arr) 等操作(即使使用 'allow_all_attr':True )。

我知道我可以在客户端使用 rpyc 获取方法获取 return_arr,但出于内部项目原因,我想将客户端代码(几乎)留空。

那么,有没有办法配置 Service/ 方法以按值而不是 netref 返回 numpy 数组?

0 投票
1 回答
302 浏览

python-3.x - 如何在嵌套数据上访问 RPyC 中的公共属性?

我正在尝试按照本文档访问 RPyC 调用上的公共属性,但没有看到它像文档中提到的那样工作。

文档说,如果您不指定protocol_config={'allow_public_attrs': True,},公共属性,即使是内置数据类型也将无法访问。但是,即使我们指定了这一点,嵌套数据结构的公共属性也无法访问?

RPyC 服务器代码。

客户端调用

# Case 1 如果数据是嵌套结构(使用内置数据类型),它不起作用。

案例2:解决方法,使用json(穷人的泡菜)将嵌套数据作为字符串传递并在服务器端解码。

案例 3:有趣的是,在第一级内置项目是可以访问的,就像 hello 方法一样。但是在嵌套数据上调用它会出错。

我有问题的解决方法/解决方案(上面的案例 2),但正在寻找关于为什么不允许这样做或者它是否是错误的解释。感谢您的投入。

0 投票
1 回答
244 浏览

python - RPyC - 从暴露的类继承

我有一个导入特定模块的 RpyC 服务器,应该公开这个模块内的一个类,以便可以从客户端继承这个类。

出于测试目的,我删除了模块导入/公开,并在我的 RPyC 服务中创建了一个名为暴露_TestClass 的简单类。

服务器端:rpyc_server.py

客户端:python3 shell

0 投票
1 回答
88 浏览

python - Python rpyc 在后台运行

我正在使用 rpyc 创建一个服务(服务器)。我能够做到这一点。现在我想运行它并使用我的客户端连接到它。我运行服务器

这运行良好。然后我运行客户端

问题是我得到一个错误:

当我从 Anaconda Spyder 运行 myserver.py 时,我的客户端工作正常,但是当我从 shell 或命令提示符运行我的服务器时,它说连接被拒绝。我需要运行 rpyc 服务器以连接到它吗?

0 投票
1 回答
47 浏览

python - 将 rpyc 远程 stdio 重定向到流

可以使用 rpyc 将远程 stdio 重定向到本地 stdio,但是是否可以使用自定义流来做到这一点,并对它做出反应?

最后,我想将 rpyc stdio 和串行端口流重定向到同一个流类并用同一个类处理它。

所以有人有一个例子或提示如何开始?

0 投票
0 回答
46 浏览

python - 如何在rpyc回调中传递参数pickled而不是netref

嗨,我有一个场景,我有一个 RPYC 经典服务器和一个注册到某个操作的回调。在回调中传回的参数是 protobuf 消息。(这是我的系统,我无法更改)。现在我注意到回调非常慢,(可能需要几秒钟)而且我有很多回调我试图手动“腌制”参数并在“客户端”端(注册的一侧)回调. 这比 netrefs (X10) 产生了显着的改进。唯一的问题是它使回调变得复杂,因为在回调中我必须手动pickle(在服务器上)/unpickle(在客户端)。所以问题是是否有任何方法可以强制 RPYC 将参数作为腌制传递(就像在旧 RPYC 版本中一样)或至少对于这个特定的回调。附言

0 投票
0 回答
38 浏览

python-3.x - 我们如何使用 rpyc 在 python 中的服务器端公开客户端方法

谁能指导我如何在下面的代码中公开客户端方法。

服务器端:

客户端:

导入 rpyc

这里错误返回:MyService 没有属性 conn。

0 投票
1 回答
75 浏览

python - 透明地通过带有可变参数列表的函数

我正在使用 Python RPyC 在两台机器之间进行通信。由于链接可能容易出错,我希望有一个通用包装函数,它以远程函数名称和该函数的参数作为输入,进行一些状态检查,使用参数调用函数,进行更多状态检查和然后返回函数调用的结果。包装器不应该知道函数,它的参数/参数类型或它们的数量,或者返回值,用户必须正确理解;它应该只是透明地通过它们。

我得到了getattr(conn.root, function)()调用函数的模式,但我的 Python 专业知识在填充参数时用完了。我已经阅读了有关使用*argand的各种帖子**kwarg,尤其是这篇文章,这表明我想要做的事情要么困难要么不可能。这是正确的吗?如果是这样,如果我确保所有函数参数都是关键字参数,是否会有一个可行的方案?

我确实拥有这个接口的两端(调用者和被调用者),所以我可以安排对所有函数参数进行字典化,但如果我可以避免的话,我宁愿不要让我的 API 太奇特。

编辑:在链接的远程端被调用的东西是一个具有非常普通方法的类,例如;

...其中每个参数(和返回值)的类型可以是字符串、字典、数字或列表。

0 投票
0 回答
134 浏览

python-3.x - 如何使用rpyc将数据从服务器发送到客户端和客户端到服务器?

我想从服务器到客户端和客户端到服务器连续发送数据,但不幸的是我没有得到所需的输出。谁能指出我做错了什么?

服务器端:

客户端

0 投票
0 回答
130 浏览

python - 通过 rpyc 使用队列时,Python Queue join() 挂起

简短说明
当使用 rpyc 将队列创建为远程对象时,对 q.join() 的调用将被阻塞,即使显然队列为空且所有对象都已用 task_done() 标记

上下文
在数据采集应用程序中,我有一个运行在 Raspberry pi 上的 python 脚本,它从传感器读取数据并将其发送到远程计算机。我的模型是这样的:

  • Raspi 正在运行一个经典的 rpyc 服务器。
  • 我写了一个模块和类,其中一个函数将创建一个队列,启动一个线程以用数据填充队列并将队列作为返回值返回
  • 我的客户端创建到 rpyc 的连接,创建我的采集类的实例,调用“开始采集”来获取队列的句柄,然后尝试从队列中获取数据。

当我在脚本结束时调用 q.join() 时,我正面临僵局

我做了一个简化的例子来说明这个问题。在本地运行时,程序按预期工作。当队列从远程 rpyc 服务器实例化时,它将挂起。我不明白为什么代码会卡住。

如果您有想法或调查/调试的方法,我很高兴收到您的来信!

未注释“test1”的输出:

未注释 Test2 代码的输出:

PS:使用 python 3.9 & rpyc 5.0.1

编辑: 我找到了一种解决方法,但不明白为什么它会起作用......如果我在尝试加入队列之前很好地结束并加入线程,它就会起作用。

在工作函数末尾添加的代码:

主线程中添加的代码:

tadaaam,现在队列加入没有麻烦。但我仍然不明白为什么正在运行的线程会阻止队列加入功能完成。