0
foreach-doparと並列化したい長いジョブがたくさんあるので、各スレッドは他のスレッドとは独立した仕事をします。 sink
を使用してログファイルに書き込むことで、各スレッドの状態を追跡したいものもあれば、失敗したものもあります。以下は明らかに機能しません。ログファイルには1つのエントリしかありません。何が悪かったのかR foreachスレッドを同じログファイルに書き込む方法
....saving output to file......
:
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")
ログファイルは1行だけ持っていますか?私は本当に複数のプロセスが同じファイルへの書き込みを持つ信頼していないが、
を参照してください! – horaceT