R 如何在doMC工作人员死亡时';结束了吗?

R 如何在doMC工作人员死亡时';结束了吗?,r,foreach,parallel-processing,domc,R,Foreach,Parallel Processing,Domc,doMC的文档似乎非常稀少,只列出了doMC包和registerDoMC()。我遇到的问题是,我将通过doMC/foreach生成几个工人,但当工作完成时,他们只是坐在那里占用内存。我可以去搜寻他们的进程ID,但我经常意外地杀死主进程 library(doMC) library(foreach) registerDoMC(32) foreach(i=1:32) %dopar% foo() ##kill command here? 我尝试过使用registerDoSEQ()进行跟踪,但它似

doMC的文档似乎非常稀少,只列出了doMC包和registerDoMC()。我遇到的问题是,我将通过doMC/foreach生成几个工人,但当工作完成时,他们只是坐在那里占用内存。我可以去搜寻他们的进程ID,但我经常意外地杀死主进程

library(doMC)
library(foreach)

registerDoMC(32)

foreach(i=1:32) %dopar% foo()

##kill command here?

我尝试过使用registerDoSEQ()进行跟踪,但它似乎并没有终止进程。

doMC包基本上是围绕McLappy函数的包装器,McLappy分叉应该在返回之前退出的工作进程。它不使用诸如snow包或并行包中的snow派生函数之类的持久工作程序,因此不需要诸如stopCluster之类的函数来关闭工作程序

当直接使用McLappy时,您是否看到同样的问题?当您使用较小的核心值调用registerDoMC时,它是否工作得更好


您是否在Mac上使用诸如RStudio或R.app等IDE中的doMC?如果是这样的话,您可能希望尝试从终端使用R,看看这是否会有所不同。在IDE中调用fork可能会出现问题。

我从未找到适合doMC的解决方案,因此有一段时间我一直在做以下工作:

library(doParallel)
cl <- makePSOCKcluster(4) # number of cores to use
registerDoParallel(cl)

## computation

stopCluster(cl)
库(双并行)

cl使用registerDoSEQ()只需注册顺序工作程序,所有并行工作程序都应该停止。这不是一个完整的解决方案,但在某些情况下应该可以使用。

如果您使用
doParallel
软件包,并使用带有数字的
registerDoParallel(8)
您可以使用
unloadNamespace(“doParallel”)
终止多进程


如果您有集群的名称,您可以使用
stopCluster(cl)
删除额外的工作人员

可能
parallel::stopCluster
可以做到这一点,但我没有任何
doMC
查看
doMC
帮助页面中所有可怕警告的经验,我建议改用其他集群包。