2015-02-11 26 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,然後創建另一個羣集對象,但請記住,以前的工作人員可能無法始終正常退出。最好驗證工作進程是否已經死亡,如果不是,則手動殺死它們。

相關問題