2015-02-11 28 views
2

第一次在这里发布海报。在发布之前,我阅读了常见问题和发布指南,因此我希望我能以正确的格式发布我的问题。使用doParallel集群(R)在foreach()中发生未知错误(工作器初始化失败:21)

我正在使用R 64位控制台v 3.1.2中的doParallel集群后端运行foreach()任务。在Windows 8上。相关软件包是foreach v。1.4.2和doParallel v。1.0.8。

一些示例代码,给你的,我做什么的想法:

out <- foreach (j = 1:nsim.times, .combine=rbind, .packages=c("vegan")) %dopar% { 

b<-oecosimu(list.mat[[j]], compute.function, "quasiswap", nsimul=nsim.swap) ## where list.mat is a list of matrices and compute.function is a custom function 
..... # some intermediate code 
return(c(A,B)) ## where A and B are some emergent properties derived from object b from above 

} 

在我的任务之一,我遇到了我以前从未见过的错误。我试图在网上搜索错误,但无法找到任何线索。

错误是:

Error in e$fun(obj, substitute(ex), parent.frame(), e$data) : 
worker initialization failed: 21 

在有一次我得到这个错误,我停止以前的任务(使用R中控制台停止按钮)之后,但没有通过“关闭集群运行的代码STOPCLUSTER ()”。

在通过'stopCluster()'停止集群并注册一个新集群'makeCluster()'和'registerDoParallel()'后,我再次运行相同的代码,任务运行正常。

有没有人遇到这个错误,或者可能有任何线索/提示,我如何才能找出问题?错误可能与不停止以前的doParallel集群有关吗?

任何帮助或建议非常感谢!

干杯和谢谢!

回答

4

我同意问题是由于停止主控并继续使用处于损坏状态的集群对象造成的。在与群集工作人员的套接字连接中可能存在未读数据,导致主人和工作人员不同步。您甚至可能在调用stopCluster时遇到问题,因为它也会写入套接字连接。

如果您确实阻止了主人,我建议您致电stopCluster,然后创建另一个群集对象,但请记住,以前的工作人员可能无法始终正常退出。最好验证工作进程是否已经死亡,如果不是,则手动杀死它们。

相关问题