Rserve 服务器:如何终止阻塞实例(评估永远)?

2024-02-06

我需要执行Reval以多线程的方式,这是Rserve提供得相当好。 但是,如果一个实例的评估时间太长,我需要能够关闭正在计算阻塞评估的实例。据我测试,给定的实例将拒绝关闭,直到评估完成(显然,它需要在再次监听之前获取结果)。所以这是我的问题:

有没有办法获得阻塞实例的java句柄(类似于Process对象),这样我就可以强力杀死/终止评估(类似于process.destroy())? 换句话说,当我请求一个 eval(创建一个连接,抛出一个命令)时,如何通过 java 在正在处理的 eval 和与其相关的 Rsere 实例之间建立关系?

或者我是否错过了 Rserve 的某些功能,它已经可以满足此类需求?

Note:我已经尝试通过运行所有内容(所有评估)serverEval()而不是常规的eval,它在主实例上运行计算,但这当然不能令人满意,因为它只使用一个进程(主进程)。我可以杀死那个,但我的主要目标是能够单独关闭在单个实例上运行的阻塞评估。当然,保留我的 8 个 CPU 核心的优势,也就是说,保留并行性。否则就没有必要使用 Rserve(在这种情况下,JRI 引擎就足够了)。

Note:我想避免这种事情(thread https://stackoverflow.com/questions/21580654/rserve-multiple-instances-on-one-server),在不同的端口上处理主服务器本身的多个实例。那不是一个选择。

我已经尝试在 Rserve 的邮件列表上获取信息,但尚未得到答复。 我希望我的表述足够清楚,以便能够在这里得到答案或有用的评论。如果没有,请询​​问详情。非常感谢。

Edit:我也测试过RCaller http://code.google.com/p/rcaller/,它处理一个需要的尽可能多的 R 实例,但是,由于它将结果写入 XML 文件以便稍后从 java 端解析(并不像 Rserve 那样真正使用通信协议),所以对于我必须做的事情来说它太慢了履行...


好的,这可以通过这种方式完成(从一些好人那里得到的,他们最终在 Rserve devel 邮件列表上回答了我):

在运行的线程中eval应该是阻塞或太长,并且假设 Rserve 已启动:

private RConnection rEngine = null;
private int rServePid = -1;

//...

// Keep an opened instance and store the related pid
RConnection rconn = new RConnection();
this.rServePid = rconn.eval("Sys.getpid()").asInteger();
this.rEngine = rconn;
LOG.info("Rserve: started instance with pid '" + this.rServePid + "'.");
//...
this.rEngine.eval("some consuming code...");

它允许跟踪与所述相关的实例的 pideval(R 提供Sys.getpid()).

然后停止/中止/取消,因为一个简单的this.rEngine.close()不会停止服务器端正在处理的任务,而只会关闭连接,我们需要杀死目标Rserve实例。这可以通过调用来完成tools::pskill()(或任何其他系统调用,例如可能kill -9 my_pid(UNIX*),TASKKILL /PID my_pid /F(Windows),...,取决于平台),显然来自上述线程之外的另一个线程(正在等待“eval 部分”返回):

// Terminate.
RConnection c2 = new RConnection();
// SIGTERM might not be understood everywhere: so using SIGKILL signal, as well.
c2.eval("tools::pskill("+ this.rServePid + ")");
c2.eval("tools::pskill("+ this.rServePid + ", tools::SIGKILL)");
c2.close();
LOG.info("Rserve: terminated instance with pid '" + this.rServePid + "'.");

这样做的好处是独立于平台。

希望这能有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rserve 服务器:如何终止阻塞实例(评估永远)? 的相关文章

随机推荐

  • 如何使用 CloudKit.js 查询 nil 值?

    使用 CloudKit js 如何构建匹配字段为零的项目的查询 我尝试过的每个排列都会失败 要么它明显匹配字符串值 即 null 或 nil 要么如果我实际上尝试传递 null 它会抛出错误 有任何想法吗 以下均无效 filterBy fi
  • 异步加载 iframe

    我有一个网页指向另一个网站 我不希望这阻止页面其余部分的加载 有没有办法异步加载它 使用 jQuery 可以实现以下效果 where url是一些网址
  • Windows 10 - 自定义协议在通过其他方法工作时从 JavaScript 调用时失败

    我成功地在注册表中定义了一个自定义协议 名为FDMyAlbsIF 该协议旨在调用批处理文件 根据接收到的参数执行不同的操作 我现在面临两个问题 通过 Windows 资源管理器调用协议时 即在路径字段中输入字符串FDMyAlbsIF AAA
  • 如何提高从 2 个表中进行选择的 SQL 查询的性能

    请帮我 如何加快这个sql查询 SELECT pa FROM ParametrickeVyhladavanie pa SELECT p FROM produkty p WHERE p KATEGORIA IN categoryArray p
  • ASP.NET Core 2.1根据DB中的数据在布局中插入CSS

    我有一个正在努力解决的问题 一些背景 用户可以在我的应用程序中选择应用程序使用哪种配色方案 此选择存储在数据库中 我想做的是基于这个选择 在页面加载时 为用户所做的选择提供 CSS 文件 我一直在尝试做的是通过在 Layout cshtml
  • spring cloud aws多个sqs监听器

    我的项目中有2个sqs监听器 我希望其中之一具有相同的设置 而其中之一具有不同的设置 我想要更改的唯一值是 maxNumberOfMessages 最实用的方法是什么 我想为其中一个侦听器设置不同的 maxNumberOfMessages
  • ViewPager 内的 ListFragments

    我正在写我的第一个基于片段的应用程序并遇到了一些我无法使用 API 或 Stackoverflow 解决的严重问题 我正在使用一个浏览器在两个列表之间滑动 每个列表都有一个header按钮创建一个新的列表元素 类似于本机 Android 闹
  • 如何在页面加载时显示ajax加载gif动画?

    我尝试在我的网站中实现 AJAX 当单击 divchangepass 的内容时 它应该加载changepass template php 这是我为此使用的代码 function changepass click function block
  • 单元测试核心数据 - 异常退出,代码为 134

    我正在为我的核心数据应用程序设置单元测试 我在一个非常简单的测试中遇到了一个奇怪的问题 我收到的错误是 Developer Tools RunPlatformUnitTests include 451 0 Test rig Develope
  • asyncio create_task 永远运行

    我有以下代码 import asyncio loop asyncio get event loop async def while loop n 0 while True print f n await asyncio sleep 2 n
  • “角度未定义”的原因是什么

    我正在关注以下视频教程蛋头io http www egghead io 但在尝试效仿他创建工厂时的榜样 参见视频 我不断收到 角度未定义 参考错误 但我已经包含了角度脚本 这是我的 html 页面 div div div div
  • 如何使用 jackson 遍历生成的 json 模式并将自定义属性放入 json 模式

    type object properties name type string id type string i type integer p type object properties name type string id type
  • gnu screen:可以在最后调用的程序之后自动命名窗口吗?

    有没有办法自动让每个窗口将其名称更改为您从该窗口运行的最后一个程序的名称 这比手动重命名窗口更方便 是的 您可以使用 shelltitle 来执行此操作 假设您使用 bash 以下内容应该可以工作 将其添加到您的 screenrc shel
  • “英雄单位”是什么意思?

    英雄 一词是什么意思 为什么用它来命名网站 页面的 主要信息 具体来说 我想知道术语 英雄 或短语 英雄单位 是否是网页设计中使用的一些常见术语 但我却忽略了 英雄 一词是电影 电视道具设计师使用的 英雄道具 是为特写镜头而设计的道具 它有
  • 在 Mac 上未收到自定义记录区域的 CloudKit 推送通知

    我已设置自定义区域订阅以接收来自自定义记录区域的 静默 推送通知 我的 iOS 设备上一切正常 但我无法在 Mac 上接收通知 要注册通知 我正在注册通知类型applicationDidFinishLaunching NSApplicati
  • 我在我的博客页面上收到有关时区设置的警告[重复]

    这个问题在这里已经有答案了 正在显示PHP 日期选择器 http www triconsole com php calendar datepicker php在我的博客页面上使用简码 但低于警告 Warning date function
  • crypto.randomBytes 熵源耗尽

    我尝试使用以下命令生成大量 gt 1GB 伪随机数据crypto randomBytes 方法 但我无法为耗尽的熵源生成异常 以查看在出现这种可能的异常时我的应用程序的行为是什么 来自 Node JS 文档 注意 如果没有足够的数量 将抛出
  • Spring Data - MongoDB - JUnit 测试

    我有一个关于 Spring Data MongoDB 和 JUnit 测试的问题 RunWith SpringJUnit4ClassRunner class SpringApplicationConfiguration classes Us
  • moqing静态方法调用c#库类

    这似乎是一个很简单的问题 但我似乎找不到关键字来影响我的搜索 我试图通过模拟此方法调用中的所有对象来进行单元测试 我可以对我自己的所有创作执行此操作 除了这个 public void MyFunc MyVarClass myVar Imag
  • Rserve 服务器:如何终止阻塞实例(评估永远)?

    我需要执行Reval以多线程的方式 这是Rserve提供得相当好 但是 如果一个实例的评估时间太长 我需要能够关闭正在计算阻塞评估的实例 据我测试 给定的实例将拒绝关闭 直到评估完成 显然 它需要在再次监听之前获取结果 所以这是我的问题 有