我正在尝试在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。
答案 0 :(得分:0)
我建议您使用Rterm.exe尝试测试,而不是像Rgui那样,否则错误消息可能会丢失。当您执行startLocalWorkers时,您应该立即看到一堆写入stdout的消息。如果您没有看到它们,您可能还会遗漏一些非常有用的错误消息。
此外,由于您能够在交互式R会话中成功执行redisWorker
,因此.Rprofile中的某些内容可能会导致工作人员死于startLocalWorkers创建的非交互式R会话。您可以通过创建执行redisWorker的R脚本并使用如下命令执行它来测试它:
R --slave -f worker.R