foreach Ошибка: прерывание... Ошибка в unserialize(nodecon): ошибка чтения из соединения
Иногда мой экземпляр R тихо умирает. Я использую foreach для параллельной обработки. Я использую 16-ядерную и 64-Гбайтную оперативную память. Я использую следующий код для выполнения foreach.
cl <- makeCluster(6,outfile=mkclog);
registerDoParallel(cl, cores = detectCores())
ex <- Filter(function(x) is.function(get(x, .GlobalEnv)), ls(.GlobalEnv))
clusterExport(cl, ex)
foreach(l=1:nrow(ISDD),.combine=c,.packages=c("stringr","DBI","rJava","aspace","Hmisc","xts","log4r","codetools","lattice","Rcpp","plyr","memoise","digest","zoo","RMySQL","lubridate","foreach","parallel","doParallel","RJDBC")) %dopar%
{foreachfun(i,l,IDS,LIDS,LFLAG,RFlag,logger,SExp,Fflag,ISDD,EXPALL);}
Я обнаружил приведенную ниже ошибку в файле журнала "mkclog". Я обнаружил ту же ошибку при ошибке вызова функции serialize R и https://github.com/stan-dev/rstan/issues/243. Умерший работник приводит к выходу из существующего R сеанса. Есть ли решение?
23: foreachfun(i, l,IDS, LIDS, LFLAG, RFlag, logger, SExp, Fflag, ISDD, EXPALL)
24: eval(expr, envir, enclos)
25: eval(.doSnowGlobals$expr, envir = .doSnowGlobals$exportenv)
26: doTryCatch(return(expr), name, parentenv, handler)
27: tryCatchOne(expr, names, parentenv, handlers[[1L]])
28: tryCatchList(expr, classes, parentenv, handlers)
29: tryCatch(eval(.doSnowGlobals$expr, envir = .doSnowGlobals$exportenv), error = function(e) e)
30: (function (args) { lapply(names(args), function(n) assign(n, args[[n]], pos = .doSnowGlobals$exportenv)) tryCatch(eval(.doSnowGlobals$expr, envir = .doSnowGlobals$exportenv), error = function(e) e)})(quote(list(l = 8L)))
31: do.call(msg$data$fun, msg$data$args, quote = TRUE)
32: doTryCatch(return(expr), name, parentenv, handler)
33: tryCatchOne(expr, names, parentenv, handlers[[1L]])
34: tryCatchList(expr, classes, parentenv, handlers)
35: tryCatch(do.call(msg$data$fun, msg$data$args, quote = TRUE), error = handler)
36: doTryCatch(return(expr), name, parentenv, handler)
37: tryCatchOne(expr, names, parentenv, handlers[[1L]])
38: tryCatchList(expr, classes, parentenv, handlers)
39: tryCatch({ msg <- recvData(master) if (msg$type == "DONE") { closeNode(master) break } else if (msg$type == "EXEC") { success <- TRUE handler <- function(e) { success <<- FALSE structure(conditionMessage(e), class = c("snow-try-error", "try-error")) } t1 <- proc.time() value <- tryCatch(do.call(msg$data$fun, msg$data$args, quote = TRUE), error = handler) t2 <- proc.time() value <- list(type = "VALUE", value = value, success = success, time = t2 - t1, tag = msg$data$tag) sendData(master, value) }}, interrupt = function(e) NULL)
40: slaveLoop(makeSOCKmaster(master, port, timeout, useXDR))
41: parallel:::.slaveRSOCK()
aborting ...
Error in unserialize(node$con) : error reading from connection
Calls: <Anonymous> ... doTryCatch -> recvData -> recvData.SOCKnode -> unserialize
Execution halted
Error in unserialize(node$con) : error reading from connection
Calls: <Anonymous> ... doTryCatch -> recvData -> recvData.SOCKnode -> unserialize
Execution halted
Error in unserialize(node$con) : error reading from connection
Calls: <Anonymous> ... doTryCatch -> recvData -> recvData.SOCKnode -> unserialize
Execution halted
У меня есть подозрение на 30: (function (args) { lapply(names(args), function(n) assign(n, args[[n]], pos = .doSnowGlobals$exportenv)) tryCatch(eval(.doSnowGlobals$expr, envir = .doSnowGlobals$exportenv), error = function(e) e)})(quote(list(l = 8L)))