问题标签 [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 投票
2 回答
11643 浏览

python - PyRo 和 RPyC python 库的优缺点是什么?

我正在寻找 Python 的远程过程调用引擎,我发现PyRo(Python 远程对象)RPyC(远程 Python 调用)都是我正在寻找的东西。

但是,我很想知道它们之间的比较以及它们的优缺点是什么?

0 投票
1 回答
2488 浏览

python - PyScripter Rpyc

也许有人可以给我一些指导如何将 Rpyc 安装到 PyScripter。我将 PyScripter 1.9.9.7 与 Python 2.6 一起使用。我已经尝试谷歌它并找到了一些说明,但仍然没有成功......

谢谢!

0 投票
1 回答
911 浏览

python - 使用 rpyc 连接数据库一次并服务多个查询

尝试为临时客户端请求提供数据库查询结果,但不想为每个单独的查询打开连接。我不确定我是否做得对。

当前的解决方案在“服务器”端是这样的(为了清晰起见,大幅削减):

这运行了一段时间。但是,程序有时会崩溃,到目前为止,我还无法跟踪它何时崩溃。

我想确认的是,看看数据库连接是如何在 data_service 类之外创建的。这本身可能会导致问题吗?

非常感谢任何想法赞赏。

0 投票
1 回答
5062 浏览

python - 在 rpyc 中返回远程对象

我有一个像下面这样的远程服务器,它已经有一个初始化的类,并且我将协议配置设置为允许公共属性 True。

在客户端,如果我尝试直接连接它正在工作,而当我尝试在函数内部建立连接并返回对象时,我收到错误

**客户**

**直接连接**

如果我尝试在函数中执行此操作,则会出现错误;(

我的目的是在服务器中初始化一个对象并让许多客户端访问它。初始化的类是线程安全的,因此多个客户端可以使用它。

我意识到我在这样做时遗漏了一些东西。

--

阿迪提亚

0 投票
1 回答
1797 浏览

python - Python rpyc 无法远程运行 psutil 命令

我正在尝试psutil远程运行命令:

我有一个错误:"ImportError: No module named psutil",但我已经安装psutil在两者(远程和本地主机)中。

import os例如,当我测试使用时,它工作正常。

一些小费?

谢谢你。

0 投票
1 回答
739 浏览

rpyc - 如何在远程控制台中重新启动 RPyC 的 classic_server?

我想通过远程控制台在 Linux 中重启 RPyC 的 classic_server
但我不知道如何重启它。

所以我创建了一个 bash 来杀死所有 python 进程,
然后重新启动 classic_server
但是当我通过 subprocess 在远程控制台中调用它时,它说 addr 已经在使用中。

debug显示,在我杀死python之前,python正在监听18812,也就是classic_server监听的端口,
但是bash脚本杀死它之后,bash脚本代替了classic_server监听了18812端口!很奇怪,是吗?

所以求一个重启经典服务器的方法,或者如何解决这个问题

0 投票
1 回答
479 浏览

django - 处理对 Django Web 应用程序的计算密集型请求,可能使用预分叉 RPC 服务器

我正在运行一个基于 Django 的 web 服务,在 nginx 后面使用 Gunicorn 作为反向代理。

我的网络服务提供了一个 Django 视图,该视图使用 MATLAB 的外部实例执行计算。因为 MATLAB 启动本身需要几秒钟的时间,所以即使是只产生非常简单的 MATLAB 计算的请求也需要这么长的时间来回答。

此外,由于在我的代码中完成了 MATLAB 沙盒,因此对于 Web 服务器进程,同时运行一个 MATLAB 实例非常重要。(因此,目前我正在使用 Gunicorn 同步工作者模型,它实现了预分叉网络服务器,但不使用任何多线程。)

为了改善用户体验,我现在想通过保持一些(例如 3-5 个)“就绪”的 MATLAB 实例运行并在请求进入时使用它们来消除 MATLAB 启动的等待时间。在为请求提供服务后,MATLAB 进程将被终止并立即启动一个新的,为另一个请求做好准备。

我一直在评估两种方法来做到这一点:

  1. 继续使用 Gunicorn 同步工作器模型并为每个 Web 服务器进程保留一个 MATLAB 实例。

    这个问题似乎是传入的请求没有以循环方式分发到网络服务器工作进程。因此,可能会发生所有计算密集型请求都命中同一进程而用户仍需等待的情况,因为该单个 MATLAB 实例无法按需要尽快重新启动。

  2. 将 MATLAB 计算外包给后端服务器,后端服务器执行实际工作并由网络服务器进程通过 RPC 进行查询。

    在我的概念中,会有许多 RPC 服务器进程在运行,每个进程都托管一个正在运行的 MATLAB 进程。处理请求后,将重新启动 MATLAB 进程。因为 RPC 服务器进程是循环查询的,所以用户永远不必等待 MATLAB 启动(除非总体请求太多,但这是不可避免的)。

由于第一种方法描述的问题,我认为 RPC 服务器(方法 2)会更好地解决我的问题。

我已经看过一些 Python 的 RPC 解决方案(尤其是 Pyro 和 RPyC),但是我找不到为 RPC 服务器使用预分叉服务器模型的实现。请记住,由于沙箱,多线程是不可能的,如果服务器只在连接被接受后分叉,我仍然需要在这之后启动 MATLAB,这会阻碍整个想法。

有人知道我的问题的更好解决方案吗?还是 RPC 服务器实际上是最好的解决方案?但是然后我需要一个预分叉 RPC 服务器(= 分叉一些进程并让它们都在同一个套接字上的 accept() 上旋转)或至少一个可以轻松修改的 RPC 框架(猴子补丁?) -分叉。

提前致谢。

0 投票
1 回答
3037 浏览

python - 在 rpyc 中传递对象失败

我正在尝试使用 RPyC 将对象作为参数从客户端传递到服务器。但服务器无法访问该对象,我收到一个 AttributeError。

服务器代码:

客户代码

returns: AttributeError: cannot access 'name'.

我正在使用RPyC服务并根据网站进行编码,这应该可以。

有任何想法吗?

0 投票
2 回答
1070 浏览

android - 为什么从远程机器运行时,monkeyrunner 不工作?

我需要在远程机器上运行一个 monkeyrunner 脚本。我正在使用 python 来自动化它和 RPyC,以便我可以连接到其他机器,一切都在 CentOS 中运行。

下面写的是我使用的命令:

导入 rpyc

导入子流程

conn = rpyc.classic.connect("192.XXX.XXX.XXX",XXXXX)

conn.execute ("打印'你好'")

subprocess.Popen("/opt/android-sdk/tools/monkeyrunner -v ALL

/opt/android-sdk/tools/MYSCRIPT.py", shell=True)

这是结果:

无法打开指定的脚本文件

用法:monkeyrunner [选项] script_file

-s MonkeyServer IP 地址

-p MonkeyServer TCP 端口

-v MonkeyServer 日志记录级别

然后我意识到,如果你使用下面的命令,它就是在你的机器上运行命令。(例如:Popen 中的命令是“ls”,它会给你的结果是 LOCALHOST 当前目录中的文件和目录列表)因此,该命令是错误的。

subprocess.Popen("/opt/android-sdk/tools/monkeyrunner -v ALL

/opt/android-sdk/tools/MYSCRIPT.py", shell=True)

所以我用这个替换了代码

conn.modules.subprocess.Popen("/opt/android-sdk/tools/monkeyrunner -v ALL

/opt/android-sdk/tools/MYSCRIPT.py", shell=True)

并给我这个错误信息

=======远程回溯=======回溯(最近一次调用最后):文件“/usr/lib/python2.4/site-packages/rpyc-3.2.2-py2.4.egg /rpyc/core/protocol.py”,第 300 行,在 _dispatch_request res = self._HANDLERS[handler](self, *args) 文件“/usr/lib/python2.4/site-packages/rpyc-3.2.2- py2.4.egg/rpyc/core/protocol.py”,第 532 行,在 _handle_call 中返回 self._local_objects[oid](*args, **dict(kwargs)) 文件“/usr/lib/python2.4/subprocess .py”,第 542 行,在init errread,errwrite)文件“/usr/lib/python2.4/subprocess.py”,第 975 行,在 _execute_child 中引发 child_exception OSError:[Errno 2] 没有这样的文件或目录

======= 本地异常 ======== Traceback(最近一次调用最后):文件“”,第 1 行,在?文件“/usr/lib/python2.4/site-packages/rpyc-3.2.2-py2.4.egg/rpyc/core/netref.py”,第 196 行,调用 返回 syncreq(_self, consts.HANDLE_CALL, args, kwargs) 文件“/usr/lib/python2.4/site-packages/rpyc-3.2.2-py2.4.egg/rpyc/core/netref.py”,第 71 行,在 syncreq 返回 conn.sync_request( handler, oid, *args) 文件“/usr/lib/python2.4/site-packages/rpyc-3.2.2-py2.4.egg/rpyc/core/protocol.py”,第 438 行,在 sync_request raise obj OSError: [Errno 2] 没有这样的文件或目录

我认为它无法运行该文件,因为我没有管理员访问权限(因为我没有提供远程机器的用户名和密码)?

帮助!

0 投票
1 回答
1414 浏览

python - rpyc.Service 需要 10 秒来接收一个 150kB 的对象(在 localhost 上,没有 LAN 问题)

我正在构建一个大的(腌制时为 150kB)虚拟字典并在其上运行一个快速平稳运行的虚拟函数。

当通过 rpyc.Service 公开相同的功能时,即使我的客户端和服务器位于同一主机上,所用时间也会变为 10 秒(而不是 0.0009 秒)(这里的 LAN 延迟没有问题)。

知道为什么我的 150kB 对象从客户端传送到同一主机上的服务器需要这么长时间吗?

以及为什么dummy.dummy()即使输入对象还不“可用”,函数也会被调用(如果是,那么在两个测试用例中,函数花费的时间将是相同的)?

参见下面的我的 python (3.2) 代码。我测量在 dummy.dummy(d) 中花费的时间。

  1. 案例一:dummy.dummy 被客户端调用;执行时间 = 0.0009
  2. 案例 2:dummy.dummy 被称为 rpyc 服务;执行时间 = 10 秒

迷你服务.py

迷你客户端.py

假人.py