0

自从在我 2012 年末的 mac mini 上更新到 Yosemite OSX 以来,我所有使用 foreach 和 doMC 进行并行计算的脚本都抛出了以下错误:

The process has forked and you cannot use this CoreFoundation functionality safely. You MUST exec().
Break on __THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC__() to debug.

控制台输出

计算完成,但除了控制台中的错误输出之外,我还剩下 8 个打开的僵尸节点。当执行多个并行脚本时,这会导致系统被这些僵尸节点淹没,它们会在后台烧毁 CPU 和 RAM,从而迅速破坏整个进程:

执行脚本两次后残留的僵尸节点留在后台。

由于问题与系统有关,我不确定是否可以提供一个在您的机器上也会失败的最小示例,但以下脚本会在我的机器上重现该错误。

install.packages(c('foreach', 'doMC', 'bigrf'))
library(bigrf)
data(Cars93, package="MASS")
x <- Cars93
y <- Cars93$Type
vars <- c(4:22)
forest <- bigrfc(x, y, ntree=30L, varselect=vars, cachepath=NULL)

有其他 Yosemite 用户遇到过这种情况吗?任何人都知道这里可能发生了什么?我绝对需要解决这个问题,并且宁愿不必通过清除我的硬盘驱动器并重新安装 OSX Mavericks 来解决这个问题。

干杯,

亚伦

4

2 回答 2

0

以上@SteveWeston 回答:

最简单的解决方法是在终端窗口中使用 R CMD BATCH script.R 或 Rscript script.R 运行脚本文件。例如,将以下示例另存为test_case.R

library(bigrf)
library(doMC)
data(Cars93, package="MASS")
registerDoMC(detectCores())
x <- Cars93
y <- Cars93$Type
vars <- c(4:22)
forest <- bigrfc(x, y, ntree=30L, varselect=vars, cachepath=NULL)
preds <- predict(forest, x)
print(preds)

通过更改到该驱动器并运行 Rscript test_case.R,从您将其保存在计算机上的任何位置运行此文件。完美的执行,没有僵尸节点。我想知道为什么问题出现在 GUI 中?

谢谢你,史蒂夫!

干杯,

亚伦

于 2014-11-09T16:20:14.190 回答
0

您可以更轻松地转到Advanced options和取消选择Use multithreading for calculations。这样你就可以避免分叉。

这对我有用。

于 2016-08-16T13:25:01.717 回答