如何使R foreach线程写入同一日志文件

如何使R foreach线程写入同一日志文件,r,foreach,parallel-processing,logfile,sink,R,Foreach,Parallel Processing,Logfile,Sink,我有许多冗长的工作,我想与foreach dopar并行,以便每个线程独立于其他线程工作。我想通过使用sink写入日志文件来跟踪每个线程的状态(一些线程可能失败,而另一些线程成功)。下面的方法显然不起作用;日志文件只有一个条目 library(foreach) library(doParallel) library(doSNOW) cl = makeCluster(2, type="SOCK") registerDoSNOW(cl) dl = file("runlog.Rout", open=

我有许多冗长的工作,我想与foreach dopar并行,以便每个线程独立于其他线程工作。我想通过使用
sink
写入日志文件来跟踪每个线程的状态(一些线程可能失败,而另一些线程成功)。下面的方法显然不起作用;日志文件只有一个条目

library(foreach)
library(doParallel)
library(doSNOW)

cl = makeCluster(2, type="SOCK")
registerDoSNOW(cl)
dl = file("runlog.Rout", open="wt")
sink(dl, type="output",  append=TRUE)
sink(dl, type="message", append=TRUE)
dump <- foreach(i=1:5, 
            .errorhandling = "stop",
            .verbose=TRUE) %dopar% 
{
    beg.time = Sys.time()
    cat(as.character(beg.time), " I am running....\n", file="mylog.txt")
    # do something here.....
    end.time = Sys.time()
    del.tm = difftime(end.time, beg.time, units="mins")  
    cat("....saving output to file......\n\n", file="mylog.txt")
    save(del.tm, file = paste("I:/Rhome/H", i, ".RData", sep=""))
    return(i)
}
stopCluster(cl)
sink(type="output")
sink(type="message")

出了什么问题?

虽然我不相信多个进程会写入同一个文件,但使用
append=TRUE
选项可能会成功:

cat("...\n", file="mylog.txt", append=TRUE)
如果不设置此选项,
cat
将在每次调用“mylog.txt”时覆盖之前的内容


有关其他方法,请参见

虽然我并不真正相信有多个进程写入同一个文件,但使用
append=TRUE
选项可能会成功:

cat("...\n", file="mylog.txt", append=TRUE)
如果不设置此选项,
cat
将在每次调用“mylog.txt”时覆盖之前的内容


有关其他方法,请参见您还可以使用参数
outfile
调用
makeCluster
。从文档中,
outfile

在何处引导工人的stdout和stderr连接输出。“”表示没有重定向(这可能只对本地计算机上的工作人员有用)。默认值为“/dev/null”(“nul:”在Windows上)。另一种可能是工作者主机上的文件路径。当所有工作人员登录到同一文件时,文件将以追加模式打开


您还可以使用参数
outfile
调用
makeCluster
。从文档中,
outfile

在何处引导工人的stdout和stderr连接输出。“”表示没有重定向(这可能只对本地计算机上的工作人员有用)。默认值为“/dev/null”(“nul:”在Windows上)。另一种可能是工作者主机上的文件路径。当所有工作人员登录到同一文件时,文件将以追加模式打开


这正是我们所缺少的!请详细说明多个进程写入同一文件的问题?您认为这会导致文件中出现意外输出,甚至导致运行崩溃吗?这正是缺少的!请详细说明多个进程写入同一文件的问题?您认为这会导致文件中出现意外输出,甚至导致运行崩溃吗?