これは狂っていますが、3回発生しました。私は、foreachループを設定している:モニターをオフにすると、並列foreachループが失敗する
library(parallel)
library(foreach)
library(doParallel)
for(j in 1:length(start_times)) {
...
cl <- makeCluster(detectCores() - 1, outfile="status.txt")
registerDoParallel(cl, cores = detectCores() - 1)
assign(paste("master_data",j,sep=""),
foreach(i = 1:nrow(start_points_data), .packages=c("doBy","plyr","fossil","geosphere","reshape","rgdal","sp","rgeos","spatialEco","maptools"), .combine=rbind) %dopar% {
print(paste(Sys.time(), ": Starting ",i," of ",nrow(start_points_data)," locations.", sep=""))
...
})
stopCluster(cl)
}
(私はこのエラーが私のプロセスが長すぎることによって引き起こされたと思ったので、foreachループを別のループ内にネストされた理由があるので、私はそれを分割。。)
テスト用に私のデータセットを縮小しましたが、私は机の上に座って何度も成功しました。しかし、私は自分のコンピュータがオフの監視オンにした場合、プロセスはこのエラーで停止:
Error in unserialize(socklist[[n]]) : error reading from connection
foreachループ内のコードの個々の繰り返しは、労働者一人当たりの秒未満をとり、OUTFILEを見て、それは明らかですforeachループまたは親forループの回数が何回であっても、モニターをオフにしてから1分以内に処理が停止します。
Windowsは、モニターがオフになったことを検知したときに何かをシャットダウンしてスマートにしようとしていますか?
"outfile"をファイル名に設定するのは本当に信頼できません。なぜなら、作業者にすべてのファイルを1つのファイルに書き込ませるのはうまくいかないからです。 'outfile =" "'を使うと、死んでいるワーカーからエラーメッセージが出る可能性が高いと思うし、 "コマンドプロンプト"ウィンドウからRtermを使ってプログラムを実行してください。 –
明らかにモニターは問題ではありませんでした。相関が高い場合に過ぎないと思います。 –