Я использую parallel::mclapply()
с R 4.0.1 и получаю следующее предупреждение: запланированные ядра... не дали результатов, это повлияет на все значения заданий.
Вот результат моего исследования: просмотрев исходный код функции, я понял, что это происходит, когда вектор dr
не весь ИСТИНА. Это означает, что для некоторых ядер второе условие внутри цикла for ниже (is.raw(a)
) никогда не выполняется. a
— это значение, возвращаемое readChild()
, что, если возвращены необработанные данные хотя бы один раз, условие будет проверено хотя бы один раз. Итак, я думаю, что readChild()
возвращает NULL.
readChild и readChildren возвращают необработанный вектор с атрибутом pid, если данные были доступны, целочисленный вектор длины один с идентификатором процесса, если дочерний процесс завершился, или NULL, если дочерний процесс больше не существует (для readChildren дочерние элементы вообще отсутствуют).
Прошу вас подтвердить или опровергнуть мои выводы. Наконец, если это правда, каковы возможные причины?
while (!all(fin)) {
s <- selectChildren(ac[!fin], -1)
if (is.null(s)) break # no children -> no hope we get anything (should not happen)
if (is.integer(s))
for (ch in s) {
a <- readChild(ch)
if (is.integer(a)) {
core <- which(cp == a)
fin[core] <- TRUE
} else if (is.raw(a)) {
core <- which(cp == attr(a, "pid"))
job.res[[core]] <- ijr <- unserialize(a)
if (inherits(ijr, "try-error"))
has.errors <- c(has.errors, core)
dr[core] <- TRUE
} else if (is.null(a)) {
# the child no longer exists (should not happen)
core <- which(cp == ch)
fin[core] <- TRUE
}
}
}