并行多核plyr,错误提前退出

时间:2013-11-13 13:52:36

标签: r parallel-processing plyr parallel-foreach

在对其中一个.parallel=TRUE函数的调用中指定plyr时,即使第一次评估已经引发错误,它也会顽固地评估所有实例:

doMC::registerDoMC()
plyr::llply(rep(FALSE, 100000), stopifnot, .parallel=TRUE)

上面的示例在我的计算机上运行了将近一分钟,在途中产生了几个进程。如果省略.parallel=TRUE,则会立即退出。

遇到第一个错误后,有没有办法让llply退出?

1 个答案:

答案 0 :(得分:2)

不,我担心这是不可能的。尽早关闭并行操作并不容易,因为它通常需要在进程之间进行大量复杂的协调,即使在没有出错的情况下也可能减慢操作,并且大多数人认为这是不合需要的。此外,通常情况下,如果出现问题,所有任务都会出错,因此提前退出并没有帮助。但是,它是一种功能,当你需要它时,你无法想象为什么它没有实现。

<强>更新

我和krlmlr讨论了修改“doMC”软件包以使用mclapply函数的修改版本的可能性,该函数会在发生错误时立即退出。但是,“doMC”包现在使用“并行”包而不是“多核”包(在R-core的请求下),“parallel”不导出实现{{1}所需的低级函数},例如mclapplymcforkmckill。如果通过selectChildren运算符使用它们,则修改后的程序包将不会被CRAN接受。

但是,当错误处理设置为“停止”时,我确实修改了“doMC”以快速检查错误,以避免在发生错误时调用combine函数的开销。我的测试表明,这确实提高了此问题中使用的示例的性能,尽管不会像发生错误时:::退出一样多。新版“doMC”是1.3.2,并且在(希望)提交给CRAN之前用于R-forge进行测试。