Назначение пути к файлу на рабочем хосте при использовании doParallel в R

Я работаю на одной машине с 8 ядрами. Я хочу регистрировать stdout и stderr в файле журнала, используя параметр outfile в makeCluster.

cl = makeCluster(detectCores() - 1,      
                 outfile = "log.txt")

Приведенный выше код сохраняет файл журнала в рабочем каталоге. Мне было интересно, как изменить путь к файлу для файла вывода, чтобы сохранить его по любому заданному пути. Например.:

cl = makeCluster(detectCores() - 1,     
                 outfile = "\\\\logfolder\\log.txt")

Когда я указал путь к файлу, я не получил никакого файла журнала (ни в рабочем каталоге, ни по указанному пути). В документации указано, что мне нужно изменить путь к файлу на рабочем хосте.

outfile : куда направить выходные данные подключения stdout и stderr от рабочих процессов. "" указывает на отсутствие перенаправления (что может быть полезно только для работников на локальном компьютере). По умолчанию /dev/null (nul: в Windows). Другая возможность — это путь к файлу на рабочем хосте. Файлы будут открываться в режиме добавления, так как все рабочие процессы записываются в один и тот же файл.

Честно говоря, я не очень хорошо разбираюсь в терминологии параллельных вычислений, и мне было интересно, не могли бы вы помочь мне с изменением пути к файлу. Спасибо!


person unitedsaga    schedule 05.02.2018    source источник


Ответы (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)
person CPak    schedule 05.02.2018
comment
Спасибо! Это помогает создавать файлы журналов в указанной папке, но создает отдельный файл для каждой итерации (как и предполагалось). В моем случае это нежелательно, так как я буду запускать цикл более 1000 случаев. Я пытался изменить «выход» так, чтобы он создавал только один файл, но затем файл не добавлялся. Я мог бы использовать его, если бы я мог получить все выходные данные в одном файле журнала. - person unitedsaga; 06.02.2018