doRedis工作人员立即关闭窗户

时间:2014-01-17 15:05:08

标签: r parallel-processing redis windows-7-x64 r-doredis

解决了 - 看下面。

我正在尝试在Windows 7上运行带有R的doRedis并行后端。我在尝试doRedis vignette中的第一个示例时遇到了问题:

library('doRedis')
registerDoRedis('jobs')
startLocalWorkers(n = 2, queue = 'jobs', host = 'localhost')
...

这就是故障发生的地方:首先,运行两个R.exe进程并在任务管理器中可见,然后运行两个Rterm.exe进程,它们加载了大约250 MB的数据(我希望它们是来自我本地项目的.Rprofile文件中的库,然后立即关闭

  

我确实进行了一些检查:

Redis服务器似乎按预期工作,我可以通过运行验证:

redisInfo()

并且看到它确实已经接收到连接,并且客户端已连接。

此外,运行多个独立的R会话并注册“作业”队列,即运行以下内容:

require('doRedis')
redisWorker('jobs')

然后输入

在主R会话中运行MC示例
foreach(icount(10), .combine = sum, .multicombine = TRUE, .inorder = FALSE) %dopar% 4*sum((runif(1e5)^2 + runif(1e5)^2)<1)/1e6

按照宣传的方式工作 - 终端会话报告活动,主会话获得结果。 \换行符

  

因此,我需要帮助......

...跟踪主R会话调用的工作进程立即关闭的原因。但是,我不知道从哪里开始。我知道这个问题的可能解决方法,但能够以无忧无虑的方式启动它会更方便。

谢谢!

解决方案

问题是startLocalWorkers命令调用的R进程在这里不知道要查找库。如果我在具有正确修改的库路径列表的R会话中调用redisWorker,一切正常。但是,如果我要求这个R会话启动新工作 - 一切都失败了。

解决方案是创建一个环境变量R_USER_LIBS,它保存库文件夹的路径。一旦完成,一切都很完美。

RStudio用户应该注意环境变量的每次修改都要求他们在子R进程读取修改后的R_LIBS_USER的新值之前重启RStudio。

1 个答案:

答案 0 :(得分:0)

我建议您使用Rterm.exe尝试测试,而不是像Rgui那样,否则错误消息可能会丢失。当您执行startLocalWorkers时,您应该立即看到一堆写入stdout的消息。如果您没有看到它们,您可能还会遗漏一些非常有用的错误消息。

此外,由于您能够在交互式R会话中成功执行redisWorker,因此.Rprofile中的某些内容可能会导致工作人员死于startLocalWorkers创建的非交互式R会话。您可以通过创建执行redisWorker的R脚本并使用如下命令执行它来测试它:

R --slave -f worker.R