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