是否有可能获得带有foreach的进度条和后端的"多核类型"

sta*_*ant 12 r domc progress-bar parallel-foreach

使用foreachdoMC后端使用"多核"并行性时(我使用doMC时,我调查了其他包不允许从我想要获取进度条,使用进度包,但任何进度)这适用于Linux终端,即没有tcltk弹出窗口).

鉴于它使用分叉,我可以想象它可能不可能,但我不确定.

预期用途是指示并行加载连接100个文件时的进度(通常在#!Rscript中)

我看过几个帖子,比如在R中使用"foreach()"函数时如何创建进度条?.很高兴为此奖励.

编辑

为有人向我展示500分的赏金

  1. 使用foreach和多核(分叉)类型的并行性
  2. 得到一个进度条
  3. 使用futile.logger获取日志记录

Reprex

# load packages                                                                                                        
library("futile.logger")                                                                                               
library("data.table")                                                                                                  
library("foreach")                                                                                                     
# create temp dir                                                                                                      
tmp_dir <- tempdir()                                                                                                   
# create names for 200 files to be created                                                                             
nb_files <- 200L                                                                                                       
file_names <- file.path(tmp_dir, sprintf("file_%s.txt", 1:nb_files))                                                   
# make it reproducible                                                                                                 
set.seed(1L)                                                                                                           
nb_rows <- 1000L                                                                                                       
nb_columns <- 10L                                                                                                      
# create those 200 files sequentially                                                                                  
foreach(file_i = file_names) %do%                                                                                      
{                                                                                                                      
    DT <- as.data.table(matrix(data = runif(n = nb_rows * nb_columns), nrow = nb_rows))                                
    fwrite(x = DT, file = file_i)                                                                                      
    flog.info("Creating file %s", file_i)                                                                              
} -> tmp                                                                                                               

# Load back the files                                                                                                  
foreach(file_i = file_names, .final = rbindlist) %dopar%                                                               
{                                                                                                                      
    flog.info("Loading file %s", file_i)                                                                               
    # >>> SOME PROGRESS BAR HERE <<<                                                                                   
    fread(file_i)                                                                                                      
} -> final_data                                                                                                        
# show data                                                                                                            
final_data                                                                                                             
Run Code Online (Sandbox Code Playgroud)

期望的输出

请注意,进度条不会与打印行混淆)

INFO [2018-07-18 19:03:48] Loading file /tmp/RtmpB13Tko/file_197.txt
INFO [2018-07-18 19:03:48] Loading file /tmp/RtmpB13Tko/file_198.txt
INFO [2018-07-18 19:03:48] Loading file /tmp/RtmpB13Tko/file_199.txt
INFO [2018-07-18 19:03:48] Loading file /tmp/RtmpB13Tko/file_200.txt
[ =======>                          ] 4% 
Run Code Online (Sandbox Code Playgroud)

编辑2

在赏金结束后,没有什么能接近预期的结果.

在进度条中记录会使一切变得混乱.如果有人得到了正确的结果,我会给出另一个基于结果的赏金.

小智 -1

我使用过的一个并行处理列表的包是pbmcapply,希望这会有所帮助。