5

私の質問はこの質問に関連しています。ただし、上記の質問multicoreでは、に置き換えられたパッケージを使用していますparallelparallel応答内の関数のほとんどは、パッケージ内で複製できません。で進行状況を追跡する方法はありますかmclapplymclapplyドキュメントを見ると、というパラメーターがありますmc.silent。これで進行状況を追跡できるかどうかはわかりません。追跡できる場合、どのように、どこでログ ファイルを確認できますか? ubuntuLinux 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)

どんな助けでも大歓迎です。

4

2 に答える 2

4

これは私の関連する回答の更新です。

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")
于 2015-01-01T10:00:29.350 に答える