как отслеживать прогресс в mclapply в R в параллельном пакете

Мой вопрос связан с этим вопросом. Однако в упомянутом выше вопросе используется пакет multicore, который был заменен на parallel. Большинство функций в ответе не могут быть воспроизведены в пакете parallel. Есть ли способ отслеживать прогресс в mclapply. При просмотре документации mclapply есть параметр с именем mc.silent, я не уверен, сможет ли он отслеживать прогресс, и если да, то как и где мы можем увидеть файл журнала? Я работаю на ОС ubuntu linux. Пожалуйста, смотрите ниже воспроизводимый пример, для которого я хотел бы отметить прогресс.

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)

Любая помощь будет принята с благодарностью.


person forecaster    schedule 31.12.2014    source источник


Ответы (2)


Это обновление моего связанного ответа.

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")
person fotNelton    schedule 01.01.2015
comment
Большое спасибо @fotNelton - person forecaster; 01.01.2015

Благодаря пакету pbmcapply теперь вы можете легко отслеживать ход выполнения заданий mclapply и mcmapply. Просто замените mclapply на pbmclapply:

wait.then.square <- function(xx) {
    Sys.sleep(2)
    xx^2 
} 

library(pbmcapply)
output <- pbmclapply(1:10, wait.then.square, mc.cores = 4)

... который будет отображать симпатичный индикатор выполнения.

У автора есть хороший пост в блоге о технических деталях и тестах производительности здесь.

person thie1e    schedule 21.11.2016
comment
Спасибо большое. Знаем ли мы, работает ли pbmclapply в Windows? - person forecaster; 22.11.2016
comment
mclapply вообще не работает в Windows. В Windows пакет pbapply позволяет отслеживать прогресс без распараллеливания. Я не думаю, что он поддерживает функции параллельного применения. - person thie1e; 22.11.2016