如何杀死doMC工作人员?

Pat*_*thy 6 parallel-processing foreach r domc

doMC的文档似乎非常稀疏,仅列出了doMC-package和registerDoMC().我遇到的问题是我会通过doMC/foreach产生几个工作者,但是当工作完成后,他们只是坐在那里占用内存.我可以去寻找他们的进程ID,但我经常意外地杀死主进程.

library(doMC)
library(foreach)

registerDoMC(32)

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

##kill command here?
Run Code Online (Sandbox Code Playgroud)

我试过跟随registerDoSEQ(),但它似乎没有杀掉进程.

Ste*_*ton 5

doMC包基本上是mclapply函数的包装器,而mclapply会分配在返回之前应该退出的工作者.它不使用像snow包这样的持久性工作程序或并行程序包中的snow派生函数,因此它不需要像stopCluster这样的函数来关闭worker.

你直接使用mclapply时会看到同样的问题吗?当您使用较小的内核值调用registerDoMC时,它是否更好用?

您是否在Mac上使用IDE中的doMC,如RStudio或R.app?如果是这样,您可能需要尝试使用终端中的R来查看是否会产生影响.在IDE中调用fork可能会出现问题.


Pat*_*thy 3

我从来没有找到适合 doMC 的解决方案,所以有一段时间我一直在做以下事情:

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

## computation

stopCluster(cl)
Run Code Online (Sandbox Code Playgroud)

每次都有效。