r - 如何在并行计算期间写出日志?如何调试并行计算?

标签 r debugging parallel-processing

我发现如果在并行计算期间有多个打印函数,控制台上只会显示最后一个。所以我设置了outfile选项,希望每次打印都能得到结果。这是R代码:

cl <- makeCluster(3, type = "SOCK",outfile="log.txt") 

abc <<- 123

clusterExport(cl,"abc")

clusterApplyLB(cl, 1:6,  
         function(y){
                     print(paste("before:",abc));
                     abc<<-y;
                     print(paste("after:",abc));
         }
)
stopCluster(cl)

但我只得到三个记录:
starting worker for localhost:11888 
Type: EXEC 
Type: EXEC 
[1] "index: 3"
[1] "before: 123"
[1] "after: 2"
Type: EXEC 
[1] "index: 6"
[1] "before: 2"
[1] "after: 6"
Type: DONE 

最佳答案

看起来您只从 log.txt 中的一名工作人员获取输出。我经常想知道这是否会发生,因为当您指定 outfile="log.txt" 时,每个worker都会打开log.txt进行追加,然后调用sink .以下是工作进程在 outfile 时执行的代码不是空字符串:

## all the workers log to the same file.
outcon <- file(outfile, open = "a")
sink(outcon)
sink(outcon, type = "message")

这让我很紧张,因为我不确定所有工作人员同时打开同一个文件进行追加会发生什么。它可能依赖于操作系统或文件系统,它可能解释了为什么您只从一名工作人员获取输出。

出于这个原因,我倾向于使用 outfile="" ,在这种情况下,不执行此代码,允许输出操作正常发生,而无需使用 sink 重定向它们。功能。但是,在 Windows 上,如果使用 Rgui,则不会看到输出,因此请改用 Rterm。

一个任务中有多个打印语句应该没有问题,但是如果你没有设置outfile ,您不应该看到任何输出,因为在这种情况下所有输出都被重定向到/dev/null 。

关于r - 如何在并行计算期间写出日志?如何调试并行计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19693835/

相关文章:

c# - Parallel.For 有异常行为

r - Knitting Rmd 以不同方式对待非英文字符

r - 使用igraph在R中进行Louvain社区检测-边和顶点的格式

r - 在 R 中解析 URL 字符串

debugging - 什么是段错误 rip/r​​sp 编号以及如何使用它们

c - MPI 函数 MPI_Comm_split_type 中的 "int key"参数是什么?

r - 根据条件在 R Shiny 中显示/隐藏选择输入

iOS 错误消息 : reason: '-[__NSArrayM length]:

debugging - Debug模式: MACDOC;TRDEBG USAGE

c - 当我尝试运行 mpi 示例时权限被拒绝