R doParallel进度栏,用于监视完成的作业

问题描述 投票:3回答:1

我正在尝试编写具有多线程功能的CRAN软件包。我用doSNOW实现了完美的解决方案,但是CRAN团队将该软件包标记为“已取代”,他们要求我切换到doParallel解决方案。很好,但是我找不到像使用doParallel一样的方法来监视使用doSNOW完成的作业数量。这是我的doSNOW解决方案:

# Set up parameters
nthreads<-2
nreps<-100
funrep<-function(i){
    res<-c(log2(i),log10(i))
    Sys.sleep(0.1)
}

# doSNOW solution
library(doSNOW)
cl<-makeCluster(nthreads)
registerDoSNOW(cl)
pb<-txtProgressBar(0,nreps,style=3)
progress<-function(n){
    setTxtProgressBar(pb,n)
}
opts<-list(progress=progress)
i<-0
output<-foreach(i=icount(nreps),.combine=c,.options.snow=opts) %dopar% {
    s<-funrep(i)
    return(s)
}
close(pb)
stopCluster(cl)

这是建议的in a previous Stack Overflow post,这是一个doParallel解决方案。但是,正如您所看到的,它不会在完成工作时打印进度,而只是在结果合并后才打印进度。

# doParallel solution
library(doParallel)
progcombine<-function(){
  count<-0
  function(...) {
    count<<-count+length(list(...))
    setTxtProgressBar(pb,count)
    utils::flush.console()
    c(...)
  }
}
cl <- makeCluster(nthreads)
registerDoParallel(cl)
output<-foreach(i = icount(nreps),.combine=progcombine()) %dopar% {
    funrep(i)
}
stopCluster(cl)

您能否建议我一个使用doParallel或至少不使用被取代的doSNOW来监视作业状态完成的解决方案?可能带有进度条,也可能具有多操作系统功能。非常感谢!

r parallel-processing
1个回答
0
投票
我找不到使用doParallel的解决方案(我不认为它支持完成工作的进度条),但是也许您可以尝试新的

pbabbly:

# pbapply solution library(pbapply) cl<-parallel::makeCluster(nthreads) invisible(parallel::clusterExport(cl=cl,varlist=c("nreps"))) invisible(parallel::clusterEvalQ(cl= cl,library(dplyr))) result<-pblapply(cl=cl, X=1:nreps, FUN=funrep) parallel::stopCluster(cl)
© www.soinside.com 2019 - 2024. All rights reserved.