Назначение пути к файлу на хосте работника при использовании doParallel в R
Я работаю на одной машине с 8 ядрами. Я хочу войти stdout и stderr в файл журнала, используя опцию outfile в makeCluster
cl = makeCluster(detectCores() - 1,
outfile = "log.txt")
Приведенный выше код сохраняет файл журнала в рабочем каталоге. Мне было интересно, как изменить путь к файлу для outfile, чтобы сохранить в любом заданном пути. Например:
cl = makeCluster(detectCores() - 1,
outfile = "\\\\logfolder\\log.txt")
Когда я указал путь к файлу, я не получил никакого файла журнала (ни в рабочем каталоге, ни по указанному пути). В документации указано, что мне нужно изменить путь к файлу на хосте рабочего.
outfile: Куда направить выходные данные соединения stdout и stderr от рабочих. "" указывает на отсутствие перенаправления (которое может быть полезно только для рабочих на локальной машине). По умолчанию /dev/null (nul: в Windows). Другая возможность - путь к файлу на хосте работника. Файлы будут открываться в режиме добавления, так как все работники регистрируются в одном файле.
Честно говоря, я не очень хорош в терминологии параллельных вычислений, и мне было интересно, не могли бы вы помочь мне с изменением пути к файлу. Спасибо!
1 ответ
Это работает для меня, чтобы создать 10 отдельных файлов по фиктивному пути - C:/temp/temp/
основанный на i
, Вы можете попробовать подобный подход.
library(parallel)
cl <- makeCluster(detectCores()-1)
parallel_sink <- function(out) {
O <- file(out, "w")
sink(O)
return(O)
}
clusterExport(cl, c("parallel_sink"))
parLapply(
cl,
1:10,
function(i) {
out <- paste0("C:/temp/temp/", i, ".txt")
worker_out <- parallel_sink(out)
write(paste0("prints to stdout - ", i), stdout())
close(worker_out)
}
)
stopCluster(cl)
rm(cl)