自从我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。
干杯,
亚伦
答案 0 :(得分: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中?
谢谢你,史蒂夫!
干杯,
亚伦