如何在并行包中跟踪R中mclapply的进度

我的问题与此 question有关.但是上面引用的问题使用了并行替换的多核包.响应中的大多数函数都无法在并行包中复制.有没有办法跟踪mclapply的进度.在查看mclapply文档时,有一个名为mc.silent的参数,我不确定这是否能跟踪进度,如果可以,我们如何以及在哪里可以看到日志文件?我在ubuntu linux OS上运行.请参阅下面的重复性示例,我想对其进行处理.

require(parallel) 

wait.then.square <- function(xx){
  # Wait for one second
  Sys.sleep(2);
  # Square the argument 
  xx^2 } 

output <- mclapply( 1:10, wait.then.square, mc.cores=4,mc.silent=FALSE)

任何帮助将不胜感激.

这是我 related answer的更新.

library(parallel)

finalResult <- local({
  f <- fifo(tempfile(), open="w+b", blocking=T)
  if (inherits(parallel:::mcfork(), "masterProcess")) {
    # Child
    progress <- 0.0
    while (progress < 1 && !isIncomplete(f)) {
      msg <- readBin(f, "double")
      progress <- progress + as.numeric(msg)
      cat(sprintf("Progress: %.2f%%\n", progress * 100))
    } 
    parallel:::mcexit()
  }
  numJobs <- 100
  result <- mclapply(1:numJobs, function(...) {
    # Do something fancy here... For this example, just sleep
    Sys.sleep(0.05)
    # Send progress update
    writeBin(1/numJobs, f)
    # Some arbitrary result
    sample(1000, 1)
  })
  close(f)
  result
})

cat("Done\n")
相关文章
相关标签/搜索