2

解决了——看下面。

我正在尝试在 Windows 7 上使用 R 运行 doRedis 并行后端。在尝试doRedis 小插图中的第一个示例时遇到了问题:

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 会话调用的工作进程立即关闭的原因。但是,我不知道从哪里开始。我知道该问题的可能解决方法,但是能够以一种无忧无虑的方式启动它会更方便。

谢谢!

解决方案

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

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

RStudio 用户应该注意,环境变量的每次修改都需要他们重新启动 RStudio,然后子 R 进程才能读取修改后的新值R_LIBS_USER

4

1 回答 1

0

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

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

R --slave -f worker.R
于 2014-01-17T17:16:47.063 回答