使用并行时如何“打印”或“猫”

How can I `print` or `cat` when using parallel

提问人:Corvus 提问时间:5/23/2013 最后编辑:Corvus 更新时间:1/30/2015 访问量:14142

问:

如果我使用 then 调用一个函数,或者该函数中的语句似乎不会输出到控制台。parSapplyprintmessagecat

我的过程需要很长时间,所以我需要某种方法来查看进度并在完成后获得结果输出。是否有任何特殊命令允许我从并行进程打印到控制台?

例:

library(parallel)

oneloop = function(x) {
  for(i in 1:50) {
    a = rnorm(100000)
    a = sort(a)
  }
  print(x)
  message(x)
  cat(x)
}

cl <- makeCluster(5)
output = parSapply(cl, 1:10, oneloop)
stopCluster(cl)
R IO 并行处理

评论

0赞 Corvus 5/23/2013
谢谢,已修改以包含此内容
0赞 Tyler Rinker 5/23/2013
有效果吗?flush.console
0赞 Corvus 5/23/2013
@TylerRinker,好主意,但不,没有区别。我认为不能捕获工作进程的输出......所以问题可能是“你能将工人 stdout 重定向到主 stdout 吗”,但我现在正在推测。
0赞 Ben 5/24/2013
密切相关的问答:stackoverflow.com/q/10903787/1036500

答:

50赞 eddi 5/23/2013 #1

使用 param in,您可以将输出重定向到文件,然后检查该文件以查看程序的进展情况。outfilemakeCluster

有趣的是,在 Linux 机器上将其设置为输出到控制台,但这在 Windows 机器上对我不起作用。文件输出适用于两者。""

评论

2赞 Ben 5/24/2013
此处详细介绍了使用时获取进度日志文件的略有不同的方法:viksalgorithms.blogspot.com/2012/02/...%dopar%
0赞 Steve Weston 10/13/2013
outfile=""在带有 Rgui 的 Windows 上不起作用,但在 Rterm 上可以。
4赞 MichaelChirico 5/4/2016
奇怪的是,这记录得如此之少。我不得不仔细研究源代码 15 分钟,然后才能找到正在执行的操作(基本上被添加到发送到终端的命令中)。发送到终端与 是一致的,例如,,,它把连接表示outfileOUT=outfile""write.table""stdout
0赞 JMT2080AD 12/15/2017
使用设置打印到终端对我在 Windows 中使用 emacs 和 ESS 有用。outfile = ""
4赞 Daisuke Aramaki 1/30/2015 #2

我在 Windows 上使用 doParallel 包版本 1.0.8。我可以使用简单的 Powershell 命令进行尾部。对我有用。makeClusteroutfileoutfilepowershell Get-Content c:/path/to/log/mylog.txt -wait