我正在运行一个多线程 R 脚本,但在从群集生成输出时遇到问题。
outFun <- function()
{
cat(sample(0:9,1));
}
require(snow)
clust <- makeCluster(4)
clusterExport(clust,"outFun")
clustFun <- function(i){outFun()}
clusterApplyLB(clust,1:8,clustFun)
我知道我没有看到outFun()
的任何输出,因为它在一个新的 R 线程中,但我希望有某种方法可以将此输出转发回主线程,以便在打印时可见。
编辑:这个问题回答了Linux机器的问题,但该解决方案不适用于Windows。给出的解决方法是简单地使用文件输出,但我很好奇是否有人知道能够实际将输出发送回 Windows 中的主线程的解决方案。
makeCluster
outfile=""
选项不适用于 Windows 上的 Rgui,因为 Rgui 不会将子进程的输出发送到显示窗口。 但是,outfile=""
确实可以使用 Rterm 程序,因为它是一个简单的控制台程序:
C:Program FilesRR-3.0.2bini386> rterm -q
> library(parallel)
> clust <- makeCluster(4, outfile="")
starting worker pid=1596 on localhost:11862 at 09:13:30.005
starting worker pid=1192 on localhost:11862 at 09:13:30.342
starting worker pid=1616 on localhost:11862 at 09:13:30.679
"启动工作线程"消息来自工作进程,就在它们执行slaveLoop
函数之前。 您还应该看到执行任务的工作线程的输出:
> clusterEvalQ(clust, message("hello"))
hello
hello
hello
hello
[[1]]
NULL
[[2]]
NULL
[[3]]
NULL
[[4]]
NULL