doMC的文档似乎非常稀疏,仅列出了doMC-package和registerDoMC()。我遇到的问题是我将通过doMC/foreach生成多个工作程序,但是当工作完成时,他们只是坐在那里占用了内存。我可以去寻找他们的进程ID,但是我经常会偶然杀死主进程。
library(doMC)
library(foreach)
registerDoMC(32)
foreach(i=1:32) %dopar% foo()
##kill command here?
我已经尝试使用registerDoSEQ(),但是它似乎并没有杀死进程。
最佳答案
doMC软件包基本上是mclapply函数的包装,并且mclapply派生了应在返回之前退出的工作程序。它不使用诸如snow软件包或并行软件包中的snow派生函数之类的持久性工作程序,因此它不需要stopCluster之类的函数来关闭工作程序。
直接使用mclapply时是否看到相同的问题?当您调用具有较小内核值的registerDoMC时,它的效果更好吗?
您是否正在通过IDE(例如Mac上的RStudio或R.app)使用doMC?如果是这样,您可能想尝试在终端上使用R来看看是否有所不同。在IDE中调用fork可能存在问题。
关于r - 完成后如何杀死doMC worker ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21758806/