【发布时间】:2018-12-15 05:36:42
【问题描述】:
在使用foreach 和doMC 后端使用“多核”并行性时(我在查看它时使用 doMC,其他包不允许从我想获取进度条进行日志记录,使用progress 包,但任何进展(适用于 linux 终端,即没有 tcltk 弹出窗口)都可以。
鉴于它使用分叉,我可以想象这可能是不可能的,但我不确定。
预期用途是在我并行加载连接的 100 个文件时指示进度(通常在 #!Rscript 内)
我看过How do you create a progress bar when using the “foreach()” function in R? 之类的几个帖子。很高兴为此提供赏金。
编辑
500 分赏金提供给有人教我如何
- 使用 foreach 和多核(分叉)类型的并行性
- 获取进度条
- 使用 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
期望的输出
请注意,进度条没有与打印行混淆)
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%
编辑 2
在赏金结束后,没有什么能接近预期的结果。
在进度条中记录会使一切变得混乱。 如果有人得到正确的结果,我将给予另一个基于结果的赏金。
【问题讨论】:
-
您能否添加示例如何指定并行进程(使用
doMC)。 -
或者更好——你能给出一个你想用进度条运行/并行化的实际代码sn-p吗?
标签: r progress-bar parallel-foreach domc