相关疑难解决方法(0)

R并行计算和僵尸进程

这基本上是对这个更专业化问题的跟进.在进行并行计算时,有一些关于创建僵尸进程的帖子R:

  1. 如何阻止R离开僵尸进程
  2. 如何杀死doMC工作人员?
  3. 使用并行包删除僵尸进程

有几种方法可以进行并行计算,我将重点介绍目前在本地计算机上使用的三种方法.我在带有内核的本地计算机上使用doMCdoParallel使用foreach4:

(a)注册一个fork集群:

library(doParallel)
cl <- makeForkCluster(4)
# equivalently here: cl <- makeForkCluster(nnodes=getOption("mc.cores", 4L))
registerDoParallel(cl)
    out <- foreach(i=1:1000, .combine = "c") %dopar% {
        print(i)
    }
stopCluster(cl)
Run Code Online (Sandbox Code Playgroud)

(b)注册PSOCK集群:

library(doParallel)
cl <- makePSOCKcluster(4)
registerDoParallel(cl)
    out <- foreach(i=1:1000, .combine = "c") %dopar% {
        print(i)
    }
stopCluster(cl)
Run Code Online (Sandbox Code Playgroud)

(c)使用 doMC

library(doMC)
library(doParallel)
registerDoMC(4)
    out <- foreach(i=1:1000, .combine = "c") %dopar% {
        print(i)
    }
Run Code Online (Sandbox Code Playgroud)

有几个用户观察到在使用该doMC方法时 - 这只是mclapply函数的包装器,所以它不是 …

parallel-processing r zombie-process

14
推荐指数
1
解决办法
5003
查看次数

如何杀死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(),但它似乎没有杀掉进程.

parallel-processing foreach r domc

6
推荐指数
2
解决办法
2539
查看次数

标签 统计

parallel-processing ×2

r ×2

domc ×1

foreach ×1

zombie-process ×1