【问题标题】:Parallel computing in R. Is there way to flush.console()?R中的并行计算。有没有办法flush.console()?
【发布时间】:2014-04-12 07:43:16
【问题描述】:

我正在使用 R 包降雪。有没有办法在运行并行计算时在我的主实例上使用 flush.console() ?当我进行并行计算时,我的 R 主控制台会冻结,我想避免这种情况..

我的最小示例如下。 我有一个函数 myFun。

myFun  <- function(x)
   {
    for (i in 1 : 10)
     { 
       Sys.sleep(1)
       flush.console()
     }
   }

这个函数在它自己运行时完成工作(即,控制台被刷新):

 myFun(1)

但是当我并行运行时,R 控制台会冻结。

 library("snowfall")
 sfInit(parallel=TRUE,cpus=3,type="SOCK")
 x <- 1 : 100
 res.list <- sfClusterApplyLB(x,myFun)

我希望在并行编码时刷新控制台。

谢谢

【问题讨论】:

  • 您在运行脚本吗?将其放入脚本中。
  • @RichardScriven 我添加了脚本。
  • 我认为这是 GUI 开始使用的问题,而不是 R 的问题。如果您不想冻结控制台,可以使用终端 R 或 R Studio。在许多情况下,R Studio 的响应速度更快。
  • 您是否尝试将工作人员的输出刷新到主服务器的控制台?
  • @SteveWeston Weston 我正在使用 Mac。调用 sfClusterApplyLB 时,我的主控制台冻结,我的 Mac (10.7.5) 显示加载轮。我想做的就是避免这种情况发生..

标签: r user-interface parallel-processing


【解决方案1】:

由于“flush.console”函数更新了 R 控制台,它在集群工作线程中没有意义。虽然主 R 会话可能是交互式的,但工作人员不是。

您可以使用“交互式”功能来避免在非交互式上下文中可能出现的问题:

myFun <- function(x) {
  for (i in 1:10) { 
    Sys.sleep(1)
    if (interactive()) flush.console()
  }
}

现在“flush.console”将在 master 调用“myFun”时执行,而不是在 worker 调用它时执行。这种技术通常与“浏览器”等其他固有的交互功能一起使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多